未定义的模型字段使用`strict:false`

var mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/test', {user: 'mongod'}); mongoose.connection.once('open', function () { 

我用一个字段创build一个模型并严格:false

  var Foo = mongoose.model('Foo', mongoose.Schema({ foo: String }, {strict: false})); 

然后保存一个有两个字段的模型

  Foo.create({foo: "FOO", bar: "BAR"}, function () { 

然后阅读它,并打印它的领域

  Foo.findOne(function (err, f) { console.log(f, f.foo, f.bar); }); }); }); 

输出是{ foo: 'FOO', bar: 'BAR', _id: 53c249e876be58931f760e70, __v: 0 }'FOO'undefined 。 新元素被正确保存, console.log可以看到'BAR' ,但是我不能。 只要我添加到架构栏,我也可以看到它。 这是预期的行为? 我怎样才能达到bar而不包括在架构?

使用get可以访问架构中未定义的字段:

 Foo.findOne(function (err, doc) { console.log(doc, doc.foo, doc.get('bar')); }); 

输出:

 { _id: 53c28dad3b2464566cf5672d, foo: 'FOO', bar: 'BAR' } 'FOO' 'BAR' 

当把日志doc作为Mongoose文档的inspect方法输出所有的字段时, bar栏也显示出来。

您可以使用_doc进行访问

例如:doc._doc.fieldname