2

コレクション内の私のドキュメントの構造はこれです。

{ 
"_id" : ObjectId("54e74de2950fd3a4e5f0a37a"),
"userName": "Any_user",
"ratings": {
   "rating1" : [ ],
   "big_rating" : [ ] 
  }
}

MongoDB クライアント (mongo.exe) では、必要な追加は次のようになります

db.userContent.update({userName: "NXTaar"}, {$set: {"ratings.variable_name": []}})

MongoDB node.js ドライバーの関数が必要です。はい、「文字列としてのプロパティ名」ということを知っています。変数をプロパティ名に渡すことができます。これが私が作ろうとしたものです:

var rating = {};
var title = 'some_string';
ratings[title] = [];

usercontent.update({userName: "some_user"}, {$set: ratings}, function (err, doc) {...})

この行は、プロパティの名前でドキュメントに新しいオブジェクトを追加します

usercontent.update({userName: "some_user"}, {$set: {ratings: ratings}}, function (err, doc) {...})

これは私が必要としているものを正確に実行しますが、実行するたびに現在のプロパティを新しいものに書き換えます(はい、知っています。選択したオブジェクトを渡したもので変更する $set パラメータのためです)

変数で指定された名前のオブジェクトにプロパティを追加する関数が必要です

4

1 に答える 1

6

そのようです:

var t = "property_name"
var field_name = "ratings." + t
var update = { "$set" : { } }
update["$set"][field_qname] = []
db.usercontent.update({ "userName" : "some_user" }, update)

適切なドット表記フィールド名と適切な$set更新式を構築し、それをupdate関数に渡します。

于 2015-02-20T18:19:21.047 に答える