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 の 3 つの情報を知っています。

たとえば、「ActionDVDs」という名前の DVD コレクションに ObjectId(X) を持つ映画を持っている「SomeName」という名前のユーザーがいるかどうかを知りたいと思っています。

私はすでにこのクエリを試しました:

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

何か案が ?

4

2 に答える 2

4

moviesこれで十分です。チェックをinsideにネストする必要があります。そうしないと、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 に答える