web-dev-qa-db-ja.com

mongodbアップデートで変数を使用する

Meteorを使用して、次のような更新を実行しようとしています。

Items.update(Session.get('selectedItem'), {'$set': {'directions.0.name': area.value}})

しかし、私は次のようなもので、方向の配列インデックスを動的に設定する方法に苦労しています:

var index = //a value determined dynamically
Items.update(Session.get('selectedItem'), {'$set': {'directions[index]name': area.value}})

[index]は文字列でラップされているため、これは機能しません。また、次のようなカスタム文字列を作成しようとしました。

var string = 'directions.'+itemIndex+'.name'
Items.update(Session.get('selectedItem'), {'$set': {string: area.value}})

しかし、それは機能しません。これを行う方法について何かアイデアはありますか?

26
bento

プログラムで$setオブジェクトを作成する必要があります。

var setModifier = { $set: {} };
setModifier.$set['directions.' + index + '.name'] = area.value;
Items.update(Session.get('selectedItem'), setModifier);

更新

JavaScript環境が 計算されたプロパティ名 (例:node.js 4+)をサポートしている場合、これを1つのステップで実行できます。

Items.update(Session.get('selectedItem'), { $set: {
    ['directions.' + index + '.name']: area.value
}});
52
JohnnyHK