2015-05-07 21 views
2

默認情況下,MongoDB的上collection.save()返回文檔中所述一個寫結果對象:MongooseJS會在save()上返回一個新的結果對象嗎?

The save() returns a WriteResult object that contains the status of the insert or update operation.

但隨着貓鼬(我猜節點底層mongodb的驅動程序),您可以添加第二個參數從蒙戈 是否userResult包含檢索到的數據,這是一個新的對象,或者是傳入已經通過了對象:所填充與您剛插入的全部對象,並使用新的_id:

var user = new User(req.body); 

user.save(function (err, userResult) { 
    if (err) { 
     log.error(err); 
    } 
    log.debug('User data: ', userResult); 
}); 

所以我的問題到save()方法並從數據庫調用合併只有一些部分數據,如生成_id和/或創建日期?

回答

1

如果你看一看Model.prototype.save()

https://github.com/Automattic/mongoose/blob/8cb0e35/lib/model.js#L254

它看起來就像你在userResult得到相同的模型實例(self)。

+0

我使用3.8 ..我不明白髮生了什麼https://github.com/Automattic/mongoose/blob/3.8.x/lib/model.js#L167 – esgy

+0

它仍然返回相同'self'和'numAffected',但它在內部使用promise。 'Model.prototype.save()'中有一個'complete'函數,通過'handleSave'輔助方法創建。當這個被調用時,只要第一個err參數爲null,它將以同樣的方式解決。你可以在這裏看到它:https://github.com/Automattic/mongoose/blob/3.8.x/lib/model.js#L133 –

+0

我做了一些測試,我有這段代碼: var bigMessage =' {... 4kb數據在這裏}}; var message = new Message(bigMessage); message.save(功能(ERR,theMessage){ 如果(ERR){ 的console.log( 'ERR',ERR); } 的console.log( '消息:',theMessage); }); 使用'mongostat'我看到netIn netOut節這些值: netIn 5K netOut 4K 這是否意味着數據被返回到節點的應用程序? – esgy

相關問題