根据传递的变量动态添加子字段名称

时间:2015-08-01 15:01:35

标签: javascript node.js mongodb

我正在尝试将一个字段添加到日志字段中,该字段将动态获取其名称。例如,如果我想推送有关“名称”字段的更新,我希望能够在运行时决定它应该这样命名。我将尽力在下面解释。

我的数据应该看起来如何。注意树:logs。(dynamicName)。{ts,prop,value}。 dynamicName继承自prop值。

"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"
      }

我很难过。我只想推送到一个带有动态名称的新数组,例如:像这样:

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

但当然这不能简单地说:Mongo(或者node.js驱动程序)从字面上理解变量logName。我真的想保留这种数据格式,而不是只有一个单一的日志数组。

1 个答案:

答案 0 :(得分:3)

使用JavaScript,您可以使用“括号”Conn = DriverManager.getConnection ("jdbc:mysql://localhost/?user=root&password=rootpassword"); Statement s=Conn.createStatement(); int Result=s.executeUpdate("CREATE DATABASE databasename"); 表示法,以便在对象键的一部分中使用变量。

[]

这基本上就像:

// 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" } } }

由于使用变量设置的键名构造了语句的更新对象。