2014-01-12 46 views

回答

46

ObjectIdnodejs driver doc

當你有一個表示BSON的ObjectId(例如來自Web請求接收)的字符串,那麼你需要將其轉換爲一個的ObjectId實例:

const {ObjectId} = require('mongodb'); // or ObjectID 
// or var ObjectId = require('mongodb').ObjectId if node version < 6 

const updateStuff = (id, doc) => { 
    // `ObjectId` can throw https://github.com/mongodb/js-bson/blob/0.5/lib/bson/objectid.js#L22-L51, it's better anyway to sanitize the string first 
    if (!ObjectId.isValid(s)) { 
    return Promise.reject(new TypeError(`Invalid id: ${id}`)); 
    } 
    return collection.findOneAndUpdate(
    {_id: ObjectId(id)}, 
    {$set: doc}, 
    {returnOriginal: false} 
); 
}; 
+0

謝謝,你說得對我的使用情況。但如果我在客戶端生成'_id',是不是需要檢查其集合中的唯一性?我認爲檢查比在服務器端進行類型轉換更昂貴,你認爲如何? –

+0

「如果值不是唯一的,insert會失敗」,來自docs.mongodb.org/manual/reference/method/db.collection.insert,我不知道每種方法的性能,但ObjectIds只有24字節哈希,它取決於你的實現 – caub

+0

你好,@caub感謝您的寶貴答案。我在Angular 2/4和MongoDb中有點新手。在我的應用程序中,我使用Angular 2,LoopBack和MongoDb。我不知道這塊代碼應該添加在哪裏!它應該添加到Angular typescript文件還是在LoopBack服務器文件中?你能指導我嗎?我完全被困在這個時間點。如果我在打字稿文件中添加此代碼,那麼我會收到以下錯誤: 模塊未找到:錯誤:無法解析'mongodb' –

3
var {ObjectId} = require('mongodb'); // or ObjectID Not Working 

正如@caubub提到的那樣對我不起作用。

但是當我在MongoDB中使用var ObjectID = require('mongodb').ObjectID; // convert string to ObjectID時,我能夠將字符串轉換爲nodejs中的ObjectId mongodb本地驅動器。

僅供參考訪問http://mongodb.github.io/node-mongodb-native/2.2/api/ObjectID.html

相關問題