【问题标题】:Triple Nested Array MongoDB Query三重嵌套数组 MongoDB 查询
【发布时间】:2015-12-18 17:22:53
【问题描述】:

我想找到正确的查询以返回 Boards 集合中成员 ID 与 1 匹配的所有 Boards。有任何接受者吗?

我的架构如下:

在“Boards”系列中,

      { name: 'Board One',
    teams: [
      { name: 'Team One',
        members: [
            { id: '1', name: 'Garrett' },
            { id: '2', name: 'Sarah' }
        ]
      },
      { name: 'Team Two',
        members: [
            { id: '1', name: 'Garrett' },
            { id: '2', name: 'Jeff' }
        ]
      }
    ]
  },`{ name: 'Board Two',
    teams: [
      { name: 'Team One',
        members: [
            { id: '1', name: 'Garrett' },
            { id: '2', name: 'Sarah' }
        ]
      },
      { name: 'Team Three',
        members: [
            { id: '1', name: 'Jim' },
            { id: '2', name: 'Samson' }
        ]
      }
    ]

我正在尝试查询数组中、对象数组中、集合中的对象。我已经尝试了以下查询的许多变体..

Boards.find({
  'teams': { 
            $elemMatch: {
                          'members' : { 
                                      $elemMatch : 
                                          { 
                                            'id' : Meteor.userId() 
                                          }  
                                      }
                        }
        }
})

我想找到正确的查询以返回 Boards 集合中成员 ID 与 1 匹配的所有 Boards。

【问题讨论】:

    标签: mysql arrays mongodb collections javascript-objects


    【解决方案1】:

    这可能是因为您将 id 作为字符串存储在集合中吗?正如您将在下面看到的,我尝试用硬编码字符串值(带单引号或双引号)替换 Meteor.userId() 查询,例如“1”或“3”,我相信查询输出就是您要查找的内容。


    > db.boards.find().pretty()
    {
            "_id" : ObjectId("567443e7fba7a186bcd48bfd"),
            "name" : "Board One",
            "teams" : [
                    {
                            "name" : "Team One",
                            "members" : [
                                    {
                                            "id" : "1",
                                            "name" : "Garrett"
                                    },
                                    {
                                            "id" : "2",
                                            "name" : "Sarah"
                                    }
                            ]
                    },
                    {
                            "name" : "Team Two",
                            "members" : [
                                    {
                                            "id" : "1",
                                            "name" : "Garrett"
                                    },
                                    {
                                            "id" : "2",
                                            "name" : "Jeff"
                                    }
                            ]
                    }
            ]
    }
    {
            "_id" : ObjectId("5674441ffba7a186bcd48bfe"),
            "name" : "Board Two",
            "teams" : [
                    {
                            "name" : "Team One",
                            "members" : [
                                    {
                                            "id" : "1",
                                            "name" : "Garrett"
                                    },
                                    {
                                            "id" : "2",
                                            "name" : "Sarah"
                                    }
                            ]
                    },
                    {
                            "name" : "Team Three",
                            "members" : [
                                    {
                                            "id" : "1",
                                            "name" : "Jim"
                                    },
                                    {
                                            "id" : "2",
                                            "name" : "Samson"
                                    }
                            ]
                    }
            ]
    }
    >
    

    > db.boards.find({
    ...   'teams': {
    ...             $elemMatch: {
    ...                           'members' : {
    ...                                       $elemMatch :
    ...                                           {
    ...                                             'id' : '1'
    ...                                           }
    ...                                       }
    ...                         }
    ...         }
    ... })
    { "_id" : ObjectId("567443e7fba7a186bcd48bfd"), "name" : "Board One", "teams" : [ { "name" : "Team One", "members" : [ { "id" : "1", "name" : "Garrett" }, { "id" : "2", "name" : "Sarah" } ] }, { "name" : "Team Two", "members" : [ { "id" : "1", "name" : "Garrett" }, { "id" : "2", "name" : "Jeff" } ] } ] }
    { "_id" : ObjectId("5674441ffba7a186bcd48bfe"), "name" : "Board Two", "teams" : [ { "name" : "Team One", "members" : [ { "id" : "1", "name" : "Garrett" }, { "id" : "2", "name" : "Sarah" } ] }, { "name" : "Team Three", "members" : [ { "id" : "1", "name" : "Jim" }, { "id" : "2", "name" : "Samson" } ] } ] }
    >
    >
    > db.boards.find({
    ...   'teams': {
    ...             $elemMatch: {
    ...                           'members' : {
    ...                                       $elemMatch :
    ...                                           {
    ...                                             'id' : '3'
    ...                                           }
    ...                                       }
    ...                         }
    ...         }
    ... })
    >
    >
    

    【讨论】:

      猜你喜欢
      • 2013-06-22
      • 1970-01-01
      • 2012-05-04
      • 2011-07-12
      • 2015-06-29
      • 2015-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多