0

ファイルからデータを読み取り、「更新」メソッドを使用して、データベース内のデータを更新しようとしています。

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

モンゴは意味がわからないundefined?undefined が true の場合、Mongo はその属性を無視するという印象を受けました。

誰かがここで何が起こっているのか説明できますか?

4

1 に答える 1

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);
于 2013-06-03T21:23:45.810 に答える