从已删除.save()
ed字段的查询中检索到的mongoose文档上的.select()
是否会导致将不完整的文档写入mongo中文档的表示形式?
如果是这样,是否意味着我必须不使用字段选择或单独发出.update()
?
e.g。
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 :(得分: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()
。