3

我正在尝试使用 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) }
    }
  ]
})

任何想法 ?

4

2 回答 2

4

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

db.user.findOne(
    {'name':'SomeName', 
     'dvd': {$elemMatch: {'collectionName':'ActionDVDs', 
                          'movies': {$elemMatch: { '_id': ObjectId('X')}}}}})
于 2013-08-08T14:41:10.173 回答
4

我想这会给你一个线索:

user.find({
  name: "SomeName",
  "dvd.name": "ActionDVDs",
  "dvd.movies._id": ObjectId(X)
})
于 2013-08-08T14:27:23.240 回答