gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 12:18:22 26 4
gpt4 key购买 nike

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

我的数据应该是这样的。注意树: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"
}

我被难住了。我只是想 $push 到一个具有动态名称的新数组,例如像这样:

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

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

最佳答案

在 JavaScript 中,您可以使用“方括号”[] 符号来在对象键的一部分中使用变量。

// 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);

因为您的语句的更新对象是使用变量设置的键名构造的。

关于javascript - 根据传递的变量动态添加子字段名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31763230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com