根据传递的variablesdynamic添加子字段名称

我试图添加一个字段到日志字段,将获得它的名字dynamic。 例如,如果我想推动有关“名称”字段的更新,我希望能够在运行时决定它应该如此命名。 我将尽我所能在下面解释。

我的数据应该是这样的。 注意树:logs。(dynamicName)。{ts,prop,value}。 dynamic名称是从prop值inheritance的。

"logs": { "Name": [ { "ts": 1436952585736, "prop": "Name", "value": "Fredd" }, { "ts": 1436952600336, "prop": "Name", "value": "Fred" } ], "description": [ { "ts": 1436952585736, "prop": "description", "value": "A normal bloke" } ], 

我在应用程序中收到的数据是这样形成的:

  { "prop": "description", "value": "A normal bloke" } 

我很难过 我只是想$推动到一个新的数组与dynamic名称,例如像这样:

 var logName = "logs."+prop; collection.update( {_id: documentId}, { $push: { logName: { "ts": Date.now(), "prop": log.prop, "value": log.value } } } 

但是,这当然不能简单地说是:Mongo(或者也许是node.js驱动程序)直接从variableslogName获取。 我真的想要保持这种数据格式,而不是只有一个单一的日志数组。

使用JavaScript,您可以使用“括号” []表示法来在对象键的一部分中使用variables。

 // Input things var prop = "Name"; var payload = { "prop": "description", "value": "A normal bloke" }; // Manipulation code payload.ts = new Date(); var update = { "$push": {} }; update["$push"]["logs." + logName] = payload; 

基本上就是这样的:

 { "$push": { "logs.Name": { "prop": "description", "value": "A normal bloke" } } } 

那么你只需要做:

 collection.update({ "_id": documentId },update); 

由于您的语句的更新对象已经使用使用variables设置的键名称进行了构造。