4

DB 更新で動的に設定/更新する属性をコードで指定したいと思います。このようなもの:

var fieldname = "firstname"
var name = "loomi"
Meteor.users.update({_id:Meteor.user()._id},
                    {$set:{"profile."+fieldname: name}})

(プロファイル[フィールド名] は機能しません。)

上記の結果は、次のようになります。

Meteor.users.update({_id:Meteor.user()._id},
                       {$set:{"profile.firstname": "loomi"}})

どうすればこれをきちんと達成できますか?(オブジェクト全体を操作してオブジェクト全体を送り返すことなく。)

4

2 に答える 2

16

現在、オブジェクト リテラル内で変数キーを定義することはできません。代わりに、オブジェクトを構築してから渡す必要があります。

var $set = {};
$set['profile.' + fieldname] = name;
Meteor.users.update({_id:Meteor.user()._id}, { $set: $set });

[アップデート]

ECMAScript 6 では、オブジェクト リテラル/初期化子内の計算キーのサポートが定義されています。

したがって、ES6 互換エンジンでは、これは次のように記述できます。

Meteor.users.update(
    { _id: Meteor.user()._id },
    { $set: { ['profile.' + fieldname]: name } }
);
于 2013-01-28T14:58:44.593 に答える