2017-09-27 59 views
0

某些公司代码已创建_id值的文档,这些值不是有效的bson ObjectId值。Node.js mongodb无效_id值

已完成的代码,以便看起来像:

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) 

幸运的是,一切似乎都工作正常,在_id属性中有大量值'questionableId'

此代码是否可以接受?直观上,我想介绍一个新的id属性为每个文件,可以愉快地存储值如'questionableId',并允许mongo本地处理生成_id属性。

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

+0

不,mongodb为您生成ID,vs您需要自己生成唯一的ID – sidgate

+0

不确定我关注。如果我们手动设置文档的'_id'值,那么即使我们设置的值在由ObjectID构造函数处理时会出错,我们也可以将该值保存为mongo。一切正常,但我想知道这种方法是否有任何问题。 –

回答

0

您不必担心当前的实施。对于_id字段,不要使用ObjectId,这是一种合理的选择,并且可能有某些原因可以用这种方式完成(尝试在考虑更改事项之前了解背景)。

MongoDB documentation状态:

MongoDB中保留所有文件作为 主键的顶层_id领域。 _id必须是唯一的,并且始终具有唯一约束的索引。但是,除了唯一约束外,您可以使用集合中_id字段的任何 值。

请注意,您可能会或可能不想从切换到ObjectId受益于某些隐含功能。例如,您可以从ObjectId中提取任何文档的创建数据,如here所述。

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

+0

完美无缺,正是我需要让自己放心的文档部分! –