How to get array of json objects rather than mongoose documents

stackoverflow:How to get array of json objects rather than mongoose documents

项目使用的是mongoose3.x版本,我查询直接用的是

model.findOne(query,fields,opt,function(err,doc));

每次需要给查询出来的结果,给客户端返回结果需要添加新的字段,有两个办法:

1.使用mongoose的toObject()方法:

官方解释:Converts this document into a plain javascript object, ready for storage in MongoDB.

var mo = doc.toObject();
mo.tag = sex;

2.使用set方法:

对于mongoose 3.x 在新建Schema的时候需要显示指定strict的值为false,例如:

var model = new Schema({..}, { strict: false });

如果你使用的是mongoose 2.x,则在新建Schema的时候不需要显示指定strict的值,因为默认值是false

model.findOne(query,fields,opt,function(err,doc));
doc.set('tag','sex');

ps:mongoose 2.x 升级到3.x的坑比较大,升级需谨慎!!!

看下set方法的api:Document#set(path, val, [type], [options])

最后有个参数options,这里设置{ strict: false },可以改变model的模式

// changing strict mode behavior
doc.set(path, value, { strict: false });

关于option: strict解释,看下官方原话:

option: strict

The strict option, (enabled by default), ensures that values passed to
our model constructor that were not specified in our schema do not get saved to the db.

如果strict为treu保证不在schema定义的field不会被写进库里。