3

これに基づいて :

db.room.save({name:'public',msg:[{to:'Jo',msg:'whats up'},{to:'Jo',msg:'dude?'}]})
db.room.find()
> { "_id" : ObjectId("4f86282a87850ac4bfe9a664"), "name" : "public", "msg" : [ { "to" : "Jo", "msg" : "whats up" }, { "to" : "Jo", "msg" : "dude?" } ] }

次の結果を取得したいと思います。

db.room.find(????)
> {"name" : "public", "to" : "Jo", "msg" : "whats up"}
> {"name" : "public", "to" : "Jo", "msg" : "dude?"}

これを実現するには、どのクエリを使用する必要がありますか?

4

1 に答える 1

1

簡単に言うと、個々の埋め込みドキュメントを取得することはできません。トップレベルのドキュメントのみが返されます。

この機能に対する機能要求があります。「指定子を返すためのフィールドでの位置($)演算子のサポート」-https://jira.mongodb.org/browse/SERVER-828

この機能リクエストはバージョン2.1.1で予定されていますが、変更される可能性があります。

しばらく前にGoogleグループで「DBObjectの配列からDBObjectを取得する」という同様の質問がありました-http://groups.google.com/group/mongodb-user/browse_thread/thread/7d2c8919dd6c4dd8質問はJavaドライバーにあります具体的には、しかし答えはまだ当てはまります。

埋め込まれたドキュメントを変更する場合は、Googleグループの回答で説明されているように変更できます。さらに、新しいAggregation Frameworkには、実験したい$unwindメソッドが含まれています。埋め込まれたドキュメントのみを印刷する場合は、アプリケーションを介して印刷するか、表示するドキュメントがトップレベルになるようにドキュメント構造を変更することを検討する必要があります。

お役に立てれば!

于 2012-04-12T19:23:21.253 に答える