带有`strict:false`的未定义模型字段

Kar*_*elė 7 mongoose mongodb node.js

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

我创建了一个带有一个字段和严格的模型:false

  var Foo = mongoose.model('Foo', mongoose.Schema({
    foo: String
  }, {strict: false}));
Run Code Online (Sandbox Code Playgroud)

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

  Foo.create({foo: "FOO", bar: "BAR"}, function () {
Run Code Online (Sandbox Code Playgroud)

然后阅读并用字段打印

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

  });
});
Run Code Online (Sandbox Code Playgroud)

输出是{ foo: 'FOO', bar: 'BAR', _id: 53c249e876be58931f760e70, __v: 0 },'FOO',undefined.新元素已正确保存并console.log可以看到'BAR',但我不能.只要我在架构中添加栏,我也可以看到它.这是预期的行为吗?如何bar在不将其包含在架构中的情况下进行访问?

Joh*_*yHK 7

您可以使用以下方法访问模式中未定义的字段get:

Foo.findOne(function (err, doc) {
  console.log(doc, doc.foo, doc.get('bar'));
});
Run Code Online (Sandbox Code Playgroud)

输出:

{ _id: 53c28dad3b2464566cf5672d, foo: 'FOO', bar: 'BAR' } 'FOO' 'BAR'
Run Code Online (Sandbox Code Playgroud)

bar当Mongoose文档docinspect方法输出所有字段时,该字段也会在记录时显示.