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
      }
    ]
}

原文地址:https://www.cnblogs.com/wzs5800/p/14605703.html