Мангуст: что случилось с «_doc»?

Кажется, что 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, doesn't 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});
});

Ответы на вопрос(2)

Ваш ответ на вопрос