我正在创建一个将MongoDB用作存储后端的服务.

散列将是唯一但随机的(=非增量/顺序),因此我的问题是:

  1. 对对象ID使用随机值合法吗?例子:

$object_id = new MongoId(HEX-OF-96BIT-HASH);

或者MongoDB是否会将ObjectID与其他服务器生成的ObjectID区别对待,因为"真正的"ObjectID还包含时间戳、机器id等?

使用"随机"值的利弊是什么?我猜当新的_id没有以任何方式递增时,引擎更新插入索引的速度在统计上会慢一些——我说的对吗?

推荐答案

是的,对一个对象id使用一个随机值是完全可以的,如果某个值出现在正在存储的文档的_id字段中,它将被视为objectId.

由于_id字段始终被索引,并且是主键,所以需要确保 for each 对象生成不同的objectid.

https://docs.mongodb.com/manual/core/document/#the-id-field

Mongodb相关问答推荐

MongoDB Aggregate:查找每个月的交叉日期范围的数量

GO:如何在MongoDB中区分空字符串和nil

MongoDB-如何过滤和获取数组字段中的最新数据

MongoDB 根据最新日期查询多个不同的值

Mongo 删除最后的文件

mongoDB vs mySQL - 为什么在某些方面比另一个更好

在 MongoDB 中打开连接的 SocketTimeout

node.js & express - 应用程序 struct 的全局模块和最佳实践

如何使用python将csv数据推送到mongodb

通过 Spring Boot 应用程序访问 mongodb 时的身份验证错误

MongoDB 1.6.5:如何重命名集合中的字段

mongo php副本连接非常慢

在 URL 中使用 ID(来自 mongo 的 ObjectId)是否安全?

从 id 删除 PyMongo 中的文档

docker 在不同的端口上运行 mongo 映像

在MongoDB中查询一个半​​径内的位置

Python Django-REST-framework 和 Angularjs 的文件夹 struct

我如何将 mongodb 与electron一起使用?

如何从集合中删除除 MongoDB 中的文档之外的所有文档

全局初始化失败:BadValue Invalid or no user locale set.请确保正确设置 LANG 和/或 LC_* 环境变量