Кажется, что Mongoose делает что-то действительно классное внутри.
1 var Foo = new mongoose.model('Foo', new mongoose.Schema({a: String, b: Number}));
2 var foo = new Foo({a: 'test; b: 42});
3 var obj = {c: 1};
4 foo.goo = obj; // simple object assignment. obj should be
// passed by reference to foo.goo. recall goo
// is not defined in the Foo model schema
5 console.log(foo.goo === obj); // comparison directly after the assignment
// => false, does not behave like normal JS object
По сути, каждый раз, когда вы пытаетесь разобраться со свойствами модели Mongoose, которые не являются
а) определено в схеме модели или
б) определяется как тот же тип (массив, объект,..)... модель даже не ведет себя как обычный объект Javascript.
Переключение линии 4 на foo._doc.goo = obj
приводит к выводу на консоль true
.
редактировать: пытаться воспроизвести странности
Пример 1:
// Customer has a property 'name', but no property 'text'
// I do this because I need to transform my data slightly before sending it
// to client.
models.Customer.find({}, function(err, data) {
for (var i=0, len=data.length; i<len; ++i) {
data[i] = data[i]._doc; // if I don't do this, returned data
// has no 'text' property
data[i].text = data[i].name;
}
res.json({success: err, response:data});
});