Node.js mongodb无效_id值

时间:2017-09-27 16:37:30

标签: node.js mongodb objectid

某些公司代码创建的文档的_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属性。

我公司目前的代码有风险吗?

1 个答案:

答案 0 :(得分:0)

您无需担心当前的实施。对ObjectId字段使用_id这是一个有效的选择,并且可能有这样做的原因(尝试在考虑更改内容之前了解背景)。

MongoDB documentation州:

  

MongoDB将_id字段保留在所有文档的顶层   首要的关键。 _id必须是唯一的,并且始终具有唯一的索引   约束。但是,除了唯一约束,您可以使用任何   集合中_id字段的值。

请注意,通过切换到ObjectId,您可能想要或可能不想从中受益。例如,您可以按照here所述的ObjectId提取任何文档的创建数据。

此外,ObjectId可以说是迄今为止_id字段最常用的数据类型,我个人也建议使用它。