2014-07-13 35 views
6
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

+1

我知道我可以定義我的模式作爲'{任:{}}',然後創建'{任:{FOO「 FOO「,bar:」BAR「}}'並打印'f.any,f.any.foo,f.any.bar'。我寧願沒有額外的領域。 –

+0

如果使用{any:{}},唯一的問題是如果您在更新對象時不想鬆開以前存儲在對象中的所有數據,則必須保存所有數據。 – isanjosgon

回答

5

您可以在架構訪問沒有定義與get領域:

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

輸出:

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

bar現場還展示了記錄doc爲貓鼬文件的inspect方法時輸出所有字段。

0

您可以訪問使用_doc

例如:doc._doc.fieldname