在 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】:_id
s 在集合中必须是唯一的。您可以通过在两个不同的集合中插入两个具有相同 _id
的文档来快速验证这一点。
您的其他假设是正确的,只需尝试它们,看看它们是否有效(它们会)。布丁的证据在吃。
注意:直接使用_id
,var 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”?