【发布时间】:2013-09-20 04:49:49
【问题描述】:
Mongoose 内部似乎在做一些非常时髦的事情。
var Foo = new mongoose.model('Foo', new mongoose.Schema({a: String, b: Number}));
var foo = new Foo({a: 'test'; b: 42});
var obj = {c: 1};
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
console.log(foo.goo === obj); // comparison directly after the assignment
// => false, doesn't behave like normal JS object
基本上,任何时候您尝试处理 Mongoose 模型的属性时都不是
a) 在模型的架构中定义或
b) 定义为相同类型(数组、obj、..)...模型的行为甚至不像普通的 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});
});
【问题讨论】:
-
goo是一个字符串,但你在值中放入了一个对象? -
@WiredPrairie 我已经重写以更好地说明怪异
-
我仍然无法复制您在第一个示例中遇到的问题。你用的是什么版本的 NodeJS 和 mongo?
-
在第二个示例中添加了更多细节。
-
@Colin 看起来答案不再符合您的问题了,您有没有弄清楚为什么 ._doc 存在/为什么来自 Mongoose 的文档的行为不像我们期望的 javascript 对象那样?