Mongodb:通过“_id”字段搜索嵌入文档

Posted

技术标签:

【中文标题】Mongodb:通过“_id”字段搜索嵌入文档【英文标题】:Mongodb: searching embedded documents by the '_id' field 【发布时间】:2020-09-18 12:23:18 【问题描述】:

如果我有一个像这样结构的数据作为集合中的单个文档:


_id: ObjectId("firstid"),
"name": "sublimetest",
"child": 
        _id: ObjectId("childid"),
        "name": "materialtheme"
    

有没有办法通过 id "childid" 搜索嵌入的文档? 因为 mongo 不索引嵌入文档的 _id 字段(如果我在这里错了,请纠正我), 因为这个查询不起作用: db.collection.find(_id:"childid");

如果有任何其他文档数据库适合这种结构为树的检索数据,请建议我,其中要求是:

    无需发出联接即可查询子级 在树中找到任何节点的速度与找到根节点一样快,就好像所有这些节点都作为单独的文档存储在一个集合中一样。

为什么这不是建议的问题的重复: 潜在重复问题,使用点符号查询文档。但是如果文档嵌套了 7 层怎么办?在这种情况下,不适合使用点表示法编写查询。我想要的是,所有文档,无论是***文档还是嵌套文档,如果它们具有 _id 字段,都应该在 _id 索引的存储桶中,这样当您搜索 db.collection.find(_id: "asdf" ),它应该考虑嵌套的文档也具有匹配“asdf”的_id字段。简而言之,就好像内部文档没有嵌套,而是与外部文档平行。

【问题讨论】:

这能回答你的问题吗? ***.com/questions/30044792/… 这能回答你的问题吗? MongoDB: How to find a document by an id inside a nested document --> 将其设为 dup @adamgy,我在答案中添加了解释,说明为什么这不是重复的。 @whoami,我在答案中添加了解释,说明为什么这不是重复的。 你可以在嵌入式数组上放置索引 【参考方案1】:

您可以使用dot notation:

db.posts.find("child._id": "childid")

【讨论】:

我想,你想使用ObjectId类。

以上是关于Mongodb:通过“_id”字段搜索嵌入文档的主要内容,如果未能解决你的问题,请参考以下文章

多个子字段的 MongoDB 查询匹配

MongoDB请求:仅从嵌入数组中的嵌入文档中过滤特定字段

在 MongoDB 中搜索多个集合

通过键字段查找 MongoDB 集合中的所有重复文档

MongoDB - _id 索引大小的奇怪差异

在 mongodb 中删除所有 ObjectId 类型的文档作为 _id 字段