【问题标题】:MongoDB - How to search a value into nested arrays?MongoDB - 如何将值搜索到嵌套数组中?
【发布时间】:2013-08-10 06:53:05
【问题描述】:

我正在尝试使用 MongoDB 将值搜索到许多子数组中的查询。 db 架构如下所示:

user:
[
{ 
 name: "SomeName",
 dvd: [
     {
       collectionName: "ActionDVDs",
       movies: [ 
       { 
         _id: ObjectId(X),
         mark: 10
       },
       { 
         _id: ObjectId(Y),
         mark: 8
       }
     }  
  ]
}
...
]

我知道三个信息:user.name、dvd.collectioName、movies._id。

例如,我想知道是否有任何名为“SomeName”的用户将带有 ObjectId(X) 的电影放入名为“ActionDVDs”的 dvd 集合中。

我已经尝试过这个查询:

user.findOne(
{
  $and:  [
    {name: "SomeName"},
    {dvd : {
         $elemeMatch: { name: "ActionDVDs" }
    },
    {movies: {
         $elemMatch: { _id: ObjectId(X) }
    }
  ]
})

有什么想法吗?

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    我想这会给你一个线索:

    user.find({
      name: "SomeName",
      "dvd.name": "ActionDVDs",
      "dvd.movies._id": ObjectId(X)
    })
    

    【讨论】:

      【解决方案2】:

      应该这样做,您需要将movies 的检查嵌套在dvd 中,否则它将匹配任何电影集合中的电影;

      db.user.findOne(
          {'name':'SomeName', 
           'dvd': {$elemMatch: {'collectionName':'ActionDVDs', 
                                'movies': {$elemMatch: { '_id': ObjectId('X')}}}}})
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-01-13
        • 2015-06-29
        • 1970-01-01
        • 1970-01-01
        • 2018-05-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多