未定义的模型字段使用`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