2013-10-09 58 views
0

從查詢中檢索到的具有.select() ed字段的貓鼬文檔上的.save()是否會導致將不完整的文檔寫入文檔的mongo表示中?保存已刪除選定字段的Mongoose文檔

如果是這樣,是否意味着我不得不分別使用字段選擇或發佈.update()

例如

Posts 
    .findById(someId) 
    .select('-body') 
    .exec(function(err, post){ 
    post.edited = Date.now(); 
    post.save(function(err){ 
     // will `post` still have the body field if I query for it from the database again? 
    }) 
    }) 
+0

我剛剛遇到了一個(bug?問題?)與4.1.6,當我選擇(「_ id」),然後立即保存()我看到數據丟失隨機跨越一個大型文件。 –

回答

7

那麼,就試試:)

// uses streamline.js 
var mongoose = require('mongoose'); 
var client = mongoose.connect('mongodb://localhost/test'); 

var Doc = mongoose.model('Doc', new mongoose.Schema({ 
    name : String, 
    body : String 
})); 

var doc  = new Doc({ name : 'foo', body : 'this is the body' }).save(_); 
var result = Doc.findById(doc._id).select('-body').exec(_); 

console.log('R#1', result); 

doc.name = 'new name'; 
var newdoc = doc.save(_); 

var result2 = Doc.findById(newdoc._id).exec(_); 

console.log('R#2', result2); 

此打印:

R#1 { name: 'foo', _id: 525506fb23c4904b61000001, __v: 0 } 
R#2 { __v: 0, 
    _id: 525506fb23c4904b61000001, 
    body: 'this is the body', 
    name: 'new name' } 

所以body屬性仍然存在。

爲什麼現在的文檔.save()實際上在內部執行.update()