Mongoose如何使用$ elemMatch来嵌套数组

时间:2016-02-16 10:58:38

标签: node.js mongodb mongoose

我必须使用以下Collection,

  {
  "_id": ObjectId("..."),
  "modules": [
    {
      "name": "AAA",
      "group": [
        {
          "name": "g1",
          "ID":1
        },
        {
          "name": "g2",
          "ID":2
        }
      ]
    },
    {
      "name": "BBB",
      "group": [
        {
          "name": "g3",
          "ID":3
        },
        {
          "name": "g4",
          "ID":4
        }
      ]
    }
  ]
}

我必须使用下面的代码,

test.find({'modules.group':{"$elemMatch":{'ID':1}}},{'modules.$.group': 1}).lean().exec(function(err, results) {

});

但上面的代码返回

"_id": ObjectId("..."),
"modules": [
    {
      "name": "AAA",
      "group": [
        {
          "name": "g1",
          "ID":1
        },
        {
          "name": "g2",
          "ID":2
        }
      ]
    }]

但我只需要匹配值数组ID,我需要在下面的响应,

"_id": ObjectId("..."),
"modules": [
    {
      "name": "AAA",
      "group": [
        {
          "name": "g1",
          "ID":1
        }
    }]

请提供解决此元素匹配问题的解决方案...

1 个答案:

答案 0 :(得分:0)

您可以通过aggregate执行此操作,以下是示例代码。

test.aggregate()
     .unwind('modules')
     .project({
         "_id": 1,
         "modules": {
             "$filter": {
                  "input": "$modules.group",
                  "as": "elem",
                  "cond": { "$eq": [ "$$elem.ID", 1 ] }
             }
         }
     })
     .exec(function(err, ret){
     });