某些公司代码创建的文档的_id
值不是有效的bson ObjectId
值。
这样做的代码如下:
var collection = getTheCollection();
collection.save(
{ _id: 'questionableId', /* more values */ },
{ w: 1, fsync: true },
function(err, result) { /* ... */ }
)
当然,如果使用{ _id: new ObjectID('questionableId'), /* ... */ }
,则会遇到以下错误:
Error: Argument passed in must be a single String of 12 bytes or a string of 24 hex characters
at new ObjectID (/.../mongodb-core/node_modules/bson/lib/bson/objectid.js:50:11)
幸运的是,一切似乎都运行良好,'questionableId'
属性中有大量值_id
。
这段代码可以接受吗?直观地说,我想为每个文档引入一个新的id
属性,它可以愉快地存储像'questionableId'
这样的值,并允许mongo本地处理生成_id
属性。
我公司目前的代码有风险吗?
答案 0 :(得分:0)
您无需担心当前的实施。对ObjectId
字段使用_id
这是一个有效的选择,并且可能有这样做的原因(尝试在考虑更改内容之前了解背景)。
MongoDB将_id字段保留在所有文档的顶层 首要的关键。 _id必须是唯一的,并且始终具有唯一的索引 约束。但是,除了唯一约束,您可以使用任何 集合中_id字段的值。
请注意,通过切换到ObjectId
,您可能想要或可能不想从中受益。例如,您可以按照here所述的ObjectId
提取任何文档的创建数据。
此外,ObjectId
可以说是迄今为止_id
字段最常用的数据类型,我个人也建议使用它。