2013-10-28 9 views
18

私は、バイモスのサンプルコレクションhttp://docs.mongodb.org/manual/reference/bios-example-collectionから私はmongodbを照会する方法について自分自身を教育して遊んでいます。 年に1:1975mongodbで配列内のサブ文書を検索

は私が_idによって獲得した賞についての情報を取得します。

私はそれらの

bios.find({ 
    "_id" : 1, 
    "awards" : { 
     "year" : 1975 
    } 
}); 

の中で、いくつかのクエリを試みたが、私は戻って、適切な文書を受け取ることはありません。配列内のこの文書をどのように取得できますか?

答えて

31

あなたはdot notationを使用する必要があります。

bios.find({"_id" : 1, "awards.year" : 1975 }); 

あなたは、クエリで_idを持っているので、それは、むしろ無意味なクエリですが、私はそれはあなたが一例でプレーしているという事実によるものだと思います。あなたが"awards" : { "year" : 1975 }を検索する場合にも、あなたは1967年から表彰を探していると言っているが、コードは、1975年

を言い、MongoDBは全体のサブドキュメントawardsの完全一致を探します。この場合、それはあなたが望むものではありません。また、awardsは配列なので、常にfalseになります。リスト内の特定の賞文書を検索する場合は、$elemMatchがおすすめです。

+0

年はタイプミスでした。わかりやすい説明をありがとう! –

関連する問題