保存已删除选定字段的Mongoose文档

时间:2013-10-09 07:10:12

标签: node.js mongodb mongoose

从已删除.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?
    })
  })

1 个答案:

答案 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()