• mongo 使用$lookup指定多个加入条件


    mongo 使用$lookup指定多个加入条件

    在mongodb中使用aggregate进行关联查询,我们会使用到$lookup,有时需要对子文档进行条件、分组、排序等操作,这是就得使用pipeline(管道)对子文档进行操作。
    管道操作符支持:

    • $match:在管道开始可以过滤文档
    • $sort:排序。只要之前没有$project、$unwind或$group,可以使用索引
    • $group:对文档分组,相当于group by
    • $geoNear:与坐标相关,用得较少

    举个例子

    现有文档:

    project(项目组):

    {
        "_id" : ObjectId("1"),
        "code" : "ai",
        "name": "人工智能",
        "createTime": ISODate("2020-05-21T19:19:19.745+0000")
    }
    

    product(产品):

    {
        "_id" : ObjectId("100"),
        "code" : "Face recognize",
        "name": "人脸识别",
        "project": "ai",
        "isDelete": 0
    }
    

    查询指定条件的项目组列表,并查询出项目组下的所有产品(关联字段project.code = product.project)

    db.project.aggregate([
      { $match: {} },
      {
        $lookup: {
          from: "product",
          let: { code: "$projectId" },
          pipeline: [
            {
              $match: {
                $expr: {
                  $and: [
                    { $eq: ['$$projectId', '$project'] }
                    { $eq: ['$isDelete', 0]},
                  ]
                }
              }
            }
          ],
          as: "products"
        } 
      },
      { $skip: 1 },
      { $limit: 10},
      { $sort: '-createTime' }
    ])
    
    

    返回:

    {
        "_id" : "1",
        "code" : "ai",
        "name": "人工智能",
        "createTime": "2020-05-21T19:19:19.771Z",
        "products": [
          {
            "_id" : "100",
            "code" : "Face recognize",
            "name": "人脸识别",
            "project": "ai",
            "isDelete": 0
          }
        ]
    }
    
    
  • 相关阅读:
    结构体比较
    不定长参数列表用法
    接口
    字符串数据类型
    *和**的打包和解包
    python类常用装饰器
    继承的实现
    map用法
    包的导入和init函数
    协程
  • 原文地址:https://www.cnblogs.com/wzs5800/p/14605703.html
Copyright © 2020-2023  润新知