2012-04-12 62 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