2012-02-05 12 views
1

私はfoosに埋め込まれbarsを持っているので、今、私はfooからある特定のbarを取得したい:FindOne埋め込まれた文書

foo = db.foos.findOne() 
bar = foo.bars.findOne({property: 'Hello World'}) 

それでは、どのように私はこれを達することができますか?

+0

埋め込みドキュメントの使用に関する基本的なドキュメントは読んでいませんでした。あなたは? –

+0

私はしました、私はしませんでしたか? – fl00r

+0

いいえ、あなたはしませんでした。 http://www.mongodb.org/display/DOCS/Dot+Notation –

答えて

2

私はあなたがこのようなものがあるとします。

foo 
{ 
    _id: 1, 
    bars :[ 
     {name: "1"}, 
     {name: "2"} 
    ] 
} 

ので、MongoDBのクエリは、常に唯一のルートドキュメントを返すクエリの上

db.foos.find({"bars.name": 1}) 

は「同じ名前のバーが含まれているすべてのFOOSを返します1 "クライアント側で必要なバーを取得できます。問い合わせの上

db.foos.find({"bars.name": 1}, {bars:{$slice: 1}, _id: 1}) 

が同じ名前「1」とバーが含まれているすべてのFOOSを返しますが、それ:

あなたが埋め込まれた配列から一つだけのアイテムが必要な場合にも、あなたは、データの最小値をロードするためにslice and include only root documenトンを使用することができますまた、ネストされたバーを1つだけ一致させ、親ドキュメントのIDだけを返すので、クライアント側では、ネストされたバーの配列から最初のアイテムをロードする必要があります。

+0

クールではないと確信しています。 '$ slice'は私が必要とするものです: – fl00r

+0

スライスは最初の' bar'だけ返します。必要なものではありません – fl00r

+0

@ fl00r:最初ではなく最初にクエリでマッチします。 –

関連する問題