【问题标题】:How to query nested array如何查询嵌套数组
【发布时间】:2015-04-30 02:56:52
【问题描述】:

假设我有类似的文件

{
    name: "name1",
    friends: [
        {
            name: "name2",
            thingsWeDo: [
                {
                    name: "running",
                    like_it: true
                },
                {
                    name: "swimming",
                    like_it: false
                }
            ]
        }
    ]
}

如果我想知道我们都喜欢游泳的朋友的名字,我该怎么做?

我知道架构设计可能会更好,但是如果我想查询这个架构,我该怎么做呢?

可以链接$elemMatch 吗?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    您应该在aggregation 中使用$unwind friendsthingsWeDo,然后使用$match 来匹配您的条件。检查以下查询:

    db.collectionName.aggregate({
      "$unwind": "$friends" // first unwind friends array 
    }, {
      "$unwind": "$friends.thingsWeDo" // second unwind friends.thingsWeDo
    }, {
      "$match": {
        "friends.thingsWeDo.name": "swimming", // match your criteria
        "friends.thingsWeDo.like_it": false
      }
    }, {
      "$project": {
        "name": "$friends.thingsWeDo.name",
        "like_it": "$friends.thingsWeDo.like_it"
      }
    }).pretty()
    

    这里unwind对大文档查询两次会变慢。根据我的建议,您应该更改架构结构并尽量避免unwinding

    【讨论】:

      【解决方案2】:

      未经测试,但应该这样做:

      Model.find({ 
        $and: [ 
          { "friends.thingsWeDo.name": 'swimming' }, 
          { "friends.thingsWeDo.like_it": true } 
        ] 
      }, function (err, docs) {
      
      });
      

      【讨论】:

        猜你喜欢
        • 2012-05-04
        • 2018-06-13
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        • 2019-11-20
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多