带有TypeError的mongooseJS:无法读取未定义的属性“constructor”

时间:2013-06-03 20:04:25

标签: mongodb mongoose

我正在尝试通过从文件中读取数据并使用“更新”方法来更新数据库中的数据。

var Model = require('./dbIndex').Model

BioMetrics.update({AID: AID}, 
  {$pushAll: {
  attr1: data[5] === '' ? undefined : {val: data[5], dt: date},
  attr2: data[6] === '' ? undefined : {val: data[6], dt: date},
  attr3: data[10] === '' ? undefined : {val: data[10], dt: date}
 }}, options, callback);

当我运行时,我收到以下错误:
TypeError: Cannot read property 'constructor' of undefined

Mongo不知道undefined的含义是什么?我的印象是,当undefined为真时,Mongo就会忽略该属性。

有人可以解释这里发生了什么吗?

1 个答案:

答案 0 :(得分:2)

MongoDB可能会忽略设置为undefined的字段,但Mongoose不会因为它有一个架构可以使用,并且会尝试将值转换为模式中定义的正确类型。

对于这样的情况,您可以通过编程方式构建$pushAll值,仅包含所需的属性:

var value = {};
if (data[5] !== '') {
    value.attr1 = {val: data[5], dt: date};
}
if (data[6] !== '') {
    value.attr2 = {val: data[6], dt: date};
}
if (data[10] !== '') {
    value.attr3 = {val: data[10], dt: date};
}
BioMetrics.update({AID: AID}, {$pushAll: value}, options, callback);