Mongodb选择字段以返回数组中的嵌入文档

标签 mongodb

鉴于以下示例文档:

{
  "_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/

相关文章:

Spring Boot MongoDB Aggregation with ReplaceRoot/如何获取组中的最新项

嵌套对象中的 MongoDB 过滤器数组元素

node.js - 如何更新 Mongoose 模型嵌套数组中的数字

mongodb 聚合查询在使用 $sum 时没有返回正确的总和

node.js - 如何使用依赖于父查询的两个独立查询通过 Mongoose 进行查询?

mongodb - MongoDB 中的负搜索

node.js - 按复合索引排序的集合分页?

node.js - 将扩展 JSON 与 node.js mongodb native 驱动程序一起使用

javascript - 我们如何使用nodejs将多个blob上传到azure

node.js - MongoDB auto_reconnect 不起作用