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

时间:2014-07-13 10:02:13

标签: node.js mongodb mongoose

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

我创建了一个带有一个字段和严格的模型: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

2 个答案:

答案 0 :(得分:7)

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

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

输出:

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

bar字段也会在记录doc时显示,因为Mongoose文档的inspect方法会输出所有字段。

答案 1 :(得分:0)

您可以使用_doc

进行访问

示例:doc._doc.fieldname