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 Groups 上提出了一个类似的问题,“从 DBObjects 数组中检索 DBObject” - http://groups.google.com/group/mongodb-user/browse_thread/thread/7d2c8919dd6c4dd8问题出在 Java 驱动程序上具体来说,但答案仍然适用。

如果您想修改嵌入文档,您可以按照 Google Groups 回复中的说明进行操作。此外,新的聚合框架包含一个 $unwind 方法,您可能想尝试一下。如果您只想打印嵌入的文档,则必须通过您的应用程序来完成,或者考虑更改您的文档结构,以便您想要显示的文档是顶级的。

希望这可以帮助!

于 2012-04-12T19:23:21.253 回答