Mongodb:对象ID作为集合中的短主键

标签 mongodb nosql

如何更好地利用 MongoDB 生成的 objectId。我不是专家用户,但到目前为止,我最终为我的对象(userid、postid)等创建了单独的 id,因为对象 id 太长并且如果用作主 ID 会使 url 难看。我保持 _id 完整,因为它有助于索引等。我想知道任何更好的策略,以便可以使用 mongo objectId 作为对 url 更友好且易于内存的键。我读到关键是日期等的组合,因此任何部分都可以为此目的在集合中唯一使用。

谢谢,
bsr/

最佳答案

如果您一个现有 ID(来自现有数据集),那么用您的 ID 覆盖 _id 是完全可以的有。

...keeo the _id intact as it help indexing etc

MongoDB 默认索引 _id 字段。如果您开始将整数放入 _id 字段,它们将像其他所有内容一样被索引。

因此,大多数 RDBM 都提供“自动递增”ID。这对于小型数据集来说很好,但在可扩展性方面确实很差。如果您尝试一次向 20 台服务器插入数据,如何保持“自动增量”不变?

通常的答案是你没有。相反,您最终会为这些 ID 使用 GUID 之类的东西。对于 MongoDB,ObjectId 已经提供。

I was wondering about any better strategy so that one can use mongo objectId as more url friendly and easy to remember key

所以这里的问题是“容易记住”的 ID 并不能真正与“高度可扩展的数据库”相结合。当您有十亿个文档时,ID 并不是真的“好记”。

所以你必须在这里做出权衡。如果您有一个可以变得非常大的表,我建议使用 ObjectId。如果您有一个相对较小且不经常更新的表(例如“查找”表),那么您可以构建自己的自动增量。

选择权完全取决于您。

关于Mongodb:对象ID作为集合中的短主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5779671/

相关文章:

php - SailsJS 中的水线似乎没有捕捉到唯一约束

mongodb - 如何在 MongoDB 中存储双陆棋棋盘?

hadoop - 使用 hadoop + mapreduce 在 couchdb 中处理数据

database - 哪个NoSql可视化广泛的应用程序

django - 在 NoSql 中使用哪个图(Mcd、Merise、UML)

java - MongoDB 将文档转换为自定义类型

node.js - 当父文档可能不存在时更新 MongoDB 子文档

mongodb - 如何使用 $exists : false condition? 创建部分索引

arrays - Mongo 数组中唯一的部分索引如何工作

javascript - 将 Node.js 参数传递给 mongodb 请求