2017-09-27 57 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

完美無缺,正是我需要讓自己放心的文檔部分! –