鉴于以下示例文档:
{
"_id" : "2",
"objects" : [{
"_id" : "1",
"name" : "embedded "
},{
"_id" : "2",
"name" : "embedded "
},{
"_id" : "3",
"name" : "embedded "
}],
"name" : "gloss2"
}
是否可以只返回一个子文档?这样我就不必选择整个父对象、获取列表并遍历列表来获取相关对象。
{
"_id" : "2",
"name" : "embedded"
}
最佳答案
Is it possible to return only one subdocument?
是的,但不是您想要的方式。如果执行以下操作,则只会取回数组的第一个元素:
coll.find({_id:'2'}, { 'objects.0': 1})
但是,您真正想要的是如下所示:
coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})
当然,这实际上在 MongoDB 中不起作用。
看your other question ,这是使用“嵌入对象”而不是“对象数组”的原因之一。使用“嵌入式对象”,您可以执行以下操作:
coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object
这让您可以只选择您需要的“嵌入式对象”。
That way I don't have to select the whole parent object...
MongoDB 的特点是总是 获取父文档。查询返回顶级文档。这被融入到整个架构中。即使您只请求文档的一部分,服务器仍然必须将整个文档加载到内存中,然后再为您提供请求的部分。
解决这个问题的唯一方法可能是新的 Aggregation Framework ,但这还没有在 stable 分支中。
关于Mongodb选择字段以返回数组中的嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9201743/