【问题标题】:Nested documents and _id indexes in mongodbmongodb中的嵌套文档和_id索引
【发布时间】:2012-06-15 15:32:33
【问题描述】:

我有一个包含嵌套文档的集合。每个文档还有一个 _id 字段。

这是一个文档结构的示例

{
   "_id": ObjectId("top_level_doc"),
   "title": "Cadernos",
   "parent": "4fd55bbc5d1709793b000008",
   "criterias": {
     "0": {
       "_id": ObjectId("a_nested_doc"),
       "value": "caderno",
       "operator": "contains",
       "field": "design0" 
    } 
  } 
}

我希望能够通过搜索它的_id来找到嵌套文档

有了这个查询

{
    "criterias._id" : ObjectId("a_nested_doc")
}

它返回父文档(我只想要嵌套的那个)。

理想情况下我会这样做

{
    "_id" : ObjectId("a_nested_doc")
}

它会返回具有该 id 的文档(无论是否嵌套)。

附言。为了简单起见,我编辑了“_id”值,只是为了这个例子。

【问题讨论】:

    标签: mongodb


    【解决方案1】:

    您可能不得不忍受选择条件。_id(至少无需为查询编写包装器),但您可以通过简单地检索字段的子集来选择文档本身。

    http://www.mongodb.org/display/DOCS/Retrieving+a+Subset+of+Fields

    // The simplest case converted to your use case
    db.collection.find( { criterias._id : ObjectId("a_nested_doc") }, { criterias : 1 } );
    

    【讨论】:

    • 我希望它没有发生,因为这些文档是动态生成的,并且并不总是具有相同的结构(例如,“条件”字段可能有一个完全不同的名称)。
    • 您能否在您的问题中澄清两个文件在这方面可能有何不同(如果可能,请举一个例子)?
    • 嗯,包含嵌套文档的字段名称不会总是“标准”,但我将始终使用相同的代码来查询数据库。
    • 无论如何,我没有看到比使用您描述的方法更好的替代方法,因此我将对我的代码进行更改以使其以这种方式工作。谢谢
    • 放弃了我的评论尝试,不客气,祝你好运。
    猜你喜欢
    • 2020-12-31
    • 2011-05-24
    • 2020-09-18
    • 1970-01-01
    • 2020-03-14
    • 2012-08-23
    • 1970-01-01
    • 2012-09-03
    • 2017-05-31
    相关资源
    最近更新 更多