鉴于下面的示例文档:
{
"_id" : "2",
"objects" : [{
"_id" : "1",
"name" : "embedded "
},{
"_id" : "2",
"name" : "embedded "
},{
"_id" : "3",
"name" : "embedded "
}],
"name" : "gloss2"
}
Run Code Online (Sandbox Code Playgroud)
是否可以只返回一个子文档?这样我就不必选择整个父对象,获取列表,并循环遍历列表以获取相关对象.
{
"_id" : "2",
"name" : "embedded"
}
Run Code Online (Sandbox Code Playgroud)
Gat*_* VP 16
是否可以只返回一个子文档?
是的,但不是你想要的方式.如果执行以下操作,则只会返回数组的第一个元素:
coll.find({_id:'2'}, { 'objects.0': 1})
Run Code Online (Sandbox Code Playgroud)
但是,您真正想要的是如下所示:
coll.find({_id:'2', 'objects._id': '3'}, { 'objects.$' : 1})
Run Code Online (Sandbox Code Playgroud)
当然,这在MongoDB中实际上不起作用.
看看你的另一个问题,这是使用"嵌入对象"而不是"对象数组"的原因之一.使用"嵌入对象",您可以执行以下操作:
coll.find({_id:'2'}, {'objects.3': 1}) // where 3 is the id of the third object
Run Code Online (Sandbox Code Playgroud)
这使您可以只选择所需的"嵌入对象".
这样我就不必选择整个父对象......
MongoDB的用处是始终提取父文档.查询返回顶级文档.这是整个架构的结晶.即使您只请求文档的一部分,服务器仍然必须将整个文档加载到内存中,然后才能为您提供所请求的文件.
解决这个问题的唯一方法可能是新的聚合框架,但这还不在稳定的分支中.
归档时间: |
|
查看次数: |
21149 次 |
最近记录: |