猫鼬与第三级嵌套字段值进行比较

I'm*_*man 0 mongoose mongodb node.js mongoose-populate mongoose-schema

我有以下收藏: 在此处输入图片说明

我想从collection1一直到Collection 3和4进行查找,以在一个查询中比较名称。

例:

collection1.find({
    collection2.collection3.name: req.body.name3,
    collection2.collection4.name: req.body.name4
}).exec()
Run Code Online (Sandbox Code Playgroud)

Zom*_*bie 6

您需要使用lookupunwindmatch,这是您问题的未经测试的解决方案

 Model.aggregate([
     {
         $match: {
             _id: req.params.id
             // for object id use
             // _id: mongoose.Types.ObjectId(req.params.id)
         }
     },
        {
          $lookup: {
            from: "collection2",
            localField: "collection2",
            foreignField: "_id",
            as: "Collection2"
          }
        },
        {
            $unwind: "$ColelctionTwo"
        },
        {
          $lookup: {
            from: "collection3",
            localField: "CollectionTwo.collection3",
            foreignField: "_id",
            as: "Collection3"
          }
        },
        {
          $lookup: {
            from: "collection4",
            localField: "CollectionTwo.collection4",
            foreignField: "_id",
            as: "Collection4"
          }
        }
      ]).exec(function(err, result) {
          if(err) {
              // handle here
          }
          if(result) {
              // do something here...
          }
      }
Run Code Online (Sandbox Code Playgroud)