2012-04-12 53 views
2

蒙戈查詢取得被嵌入基於此文件

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?"} 

我應該按順序使用什麼樣的查詢來實現這一目標?

回答

1

簡而言之,無法檢索單個嵌入式文檔。只有頂級文檔被返回。

此功能有一項功能請求。 「支持返回說明符的位置($)操作符的字段」 - https://jira.mongodb.org/browse/SERVER-828

此功能要求將針對版本2.1.1提供,但這可能會有所更改。

一個類似的問題在Google Groups上被回答,「從DBObject的數組中檢索DBObject」 - http://groups.google.com/group/mongodb-user/browse_thread/thread/7d2c8919dd6c4dd8這個問題是專門針對Java驅動程序的,但答案仍然適用。

如果您想修改嵌入式文檔,您可以按照Google網上論壇回覆中的說明進行操作。另外,新的Aggregation Framework包含一個$ unwind方法,您可能想要嘗試。如果您只想打印出嵌入文檔,則必須通過應用程序來完成,或者考慮更改文檔結構,以使要顯示的文檔爲頂層。

希望這會有所幫助!

+0

這顯然有很大幫助。至少我不會瀏覽互聯網幾個小時,以發現它現在(幾乎)不可能。萬分感謝 – Keil 2012-04-12 23:07:07