【问题标题】:In meteor/mongo collections, is the _id field unique in its collection or in the entire database?在meteor/mongo 集合中,_id 字段在其集合中还是在整个数据库中是唯一的?
【发布时间】:2015-12-09 21:38:52
【问题描述】:

我想检查如果我使用引用来自不同集合的文档的_id 字段,我将永远不会有重复的_id,即在同一数据库中的 2 个不同集合中使用。

使用流星(在 minimongo 和 mongodb 中),_id 字段在其集合或整个数据库中是唯一的吗?

【问题讨论】:

  • 您使用什么方式生成_id 值?它们是由 Meteor 自动生成的吗?请提供_id 值的示例。
  • 这里是一个例子:qhrEnh36tthTswiYv。我假设这是由 mongo 生成的。我使用附加到我使用流星生成的每个 mongo 文档的 _id 值。
  • 不,这是 Meteor 生成的。
  • 好的,我想这个问题回答了我的问题,即使它并不完全相同:stackoverflow.com/a/33332339/3793161 底线:它们是由流星生成的,它们在整个数据库中是唯一的。如果我错了,请纠正我,如果你认为我应该将我的问题标记为重复
  • 我认为您不应该将您的问题标记为重复。这是一个不同的问题,希望我已经提供了一个令人满意的答案。

标签: mongodb meteor


【解决方案1】:

您在数据库中拥有的 _id 值是由 Meteor 使用 Random.id() 生成的。这些在所有系列中都是独一无二的。

请注意,MonogoDB 中 _id 值的唯一性在集合级别得到保证,这意味着每个集合的 _id 字段上始终存在唯一索引。没有 MongoDB 机制可以确保 _id 在集合中的唯一性。

无论如何,Meteor 的随机 ID 永远不会发生冲突是一个相当安全的假设。

【讨论】:

  • 正如你所说,这是一个“安全的假设”。但是,这仍然是一个假设。它们是否保证是唯一的(假设我有数以百万计的文档和资源不是问题)?我的意思是,是否存在一种机制,如果 Random.id() 在此之前已经生成,它将被跳过并生成一个新的?因为,如果不是,那么可能会发生冲突(即使不太可能发生,但众所周知,人们会中奖)。
  • 我们如何确保 Meteor 生成的 ID 不会与集合中的现有 ID 发生冲突? (抛出错误是不行的,因为它会破坏操作并阻止数据保存)
猜你喜欢
  • 1970-01-01
  • 2013-08-07
  • 2013-12-11
  • 1970-01-01
  • 1970-01-01
  • 2018-03-19
  • 2014-09-16
  • 1970-01-01
  • 2016-07-20
相关资源
最近更新 更多