我正在尝试将一个字段添加到日志字段中,该字段将动态获取其名称。例如,如果我想推送有关“名称”字段的更新,我希望能够在运行时决定它应该这样命名。我将尽力在下面解释。
我的数据应该看起来如何。注意树: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。我真的想保留这种数据格式,而不是只有一个单一的日志数组。
答案 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" } } }
由于使用变量设置的键名构造了语句的更新对象。