Mangusto: o que há com "_doc"?

Parece que Mongoose está fazendo algo realmente funky internamente.

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

Essencialmente, toda vez que você tentar lidar com propriedades de um modelo do Mongoose que não sejam a) definido no esquema do modelo ou b) definido como o mesmo tipo (array, obj, ..) ... o modelo nem sequer se comportar como um objeto Javascript normal.

Linha de comutação4 parafoo._doc.goo = obj faz a saída do consoletrue.

editar: tentando reproduzir a estranheza

Exemplo 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});
});

questionAnswers(2)

yourAnswerToTheQuestion