【发布时间】:2017-03-30 22:19:42
【问题描述】:
我想为资源生成一个唯一的 ObjectId,以使用 nodejs mongodb 驱动程序回馈客户端。
IE:
var ObjectID = require('mongodb').ObjectID;
var objectId = new ObjectID();
阅读有关 ObjectId 的信息,似乎在某些情况下此 id 可能不是唯一的。尽管这种情况极为罕见,但我仍然不能冒险重复 id。
问题 #1,使用此驱动程序是否有可能(即使不太可能)获得重复的 id 这样做:
var objectId = new ObjectID();
问题 #2(如果以上不是 100% 保证提供唯一 ID):
此驱动程序是否保证对于某个集合,插入新文档时自动创建的 ObjectId 是唯一的?如果是,如何?如果是,我可以在没有集合的情况下自己调用 new ObjectID() 时以某种方式复制该行为吗?
如果驱动程序或 mongo 服务器确保(100% 的时间)对于一个集合,每个新文档都有一个唯一的 id,我总是可以有一个只有 id 的集合,然后在为此生成一个新的空文档时我会确保我得到一个唯一的 ObjectId。然而,仅仅为了存储 id 而拥有另一个集合似乎有点过头了。
话虽如此,有些人可能会问为什么不在集合中生成 ObjectId 并稍后使用数据更新该文档。答案是,在我的情况下,数据可能永远不会稍后出现,我不想实现逻辑来检查仅包含 id 的空文档。
【问题讨论】:
-
如果反对者能解释原因,那肯定会有所帮助。
标签: node.js mongodb mongoose uuid objectid