在 MongoDB 中,文档 _id 是不是需要在集合或整个数据库中是唯一的?

Posted

技术标签:

【中文标题】在 MongoDB 中,文档 _id 是不是需要在集合或整个数据库中是唯一的?【英文标题】:In MongoDB, do document _id's need to be unique across a collection or the entire DB?在 MongoDB 中,文档 _id 是否需要在集合或整个数据库中是唯一的? 【发布时间】:2011-08-11 23:38:05 【问题描述】:

我正在构建一个包含多个集合的数据库。我计划将唯一的字符串用于主集合中的所有文档。其他集合中的文档将引用主集合中的文档,这意味着我必须将所述 id 保存在其他集合中。但是,如果 _id 只需要在一个集合中而不是整个数据库中是唯一的,那么我只会让其他集合中的 _id 也使用上述唯一字符串。

另外,我假设为了设置我自己的_id,我所要做的就是将"_id":"unique_string" 属性作为我插入的文档的一部分,对吗?我不需要将“unique_string”转换为另一种格式,对吧?

另外,假设性地说,我可以让一个变量保存字符串“_id”并改用它吗?为了清楚起见,如下所示:var id = "_id",然后在代码中(例如在插入或查询期间)有id:"unique_string"

最好,谢谢,萨米

【问题讨论】:

【参考方案1】:

_ids 在集合中必须是唯一的。您可以通过在两个不同的集合中插入两个具有相同 _id 的文档来快速验证这一点。

您的其他假设是正确的,只需尝试它们,看看它们是否有效(它们会)。布丁的证据在吃。

注意:直接使用_idvar id = "_id"只是编译代码。

【讨论】:

谢谢!我想你是对的 - 我可以很容易地自己尝试一下。此外,id = "_id" 问题更适用于给定文档中的其他潜在键,而不是 "_id" 本身。如果它适用于一个人,它就会适用于其他人。谢谢你的回复!我很感激! 嘿yi_H,我只是想让你知道你答案的后半部分是不正确的。您不能使用变量来表示键 - 至少不能直接使用。如果您想对这些行中的变量执行任何操作,则必须事先保存文档并将该文档传递到查询中。 @thisissami:我不明白你......我可以想到它不起作用的几个原因,例如:在 javascript 对象文字中,关键部分被解析为字符串(这就是为什么你永远不必引用它)。你可以用id="_id"; doc = ...; doc[id] = value;

以上是关于在 MongoDB 中,文档 _id 是不是需要在集合或整个数据库中是唯一的?的主要内容,如果未能解决你的问题,请参考以下文章

NodeJS API:通过“Id”属性将文档查找到集合中,而不是通过 Mongodb 中的“_id”默认值

MongoDB 聚合 - 我如何“$lookup”嵌套文档“_id”?

MongoDB返回指定字段的方法

mongodb 没有则插入,有则更新其中某列

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

MongoDB:如何使用 _id 获取集合中的最新文档?