根据传递的变量动态添加子字段名
Adding a subfield name dynamically depending on variables passed
我试图添加一个字段到日志字段,将动态获得它的名称。例如,如果我想推送关于字段"Name"的更新,我希望能够在运行时决定它应该这样命名。我将尽力在下面解释。
我的数据应该如何看起来是这样的。注意这个树: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);
由于语句的更新对象已经使用变量设置了键名。
相关文章:
- JS动态添加字段-删除按钮不起作用
- 向laravel表单动态添加字段
- MaskMoney.js无法处理动态添加字段
- 流星:在创建帐户上添加字段
- 使用DB值动态添加字段到Form,php
- 使用object.freeze()扩展函数对象-can't添加字段
- 在ASP.Net web窗体/MVC中动态加载和添加字段
- 如何在使用Knex.JS添加字段时捕捉错误
- KendoUI 网格:动态向数据源添加字段
- Jquery- 动态添加字段 - 防止删除最后一个项目
- JQuery 无法获取动态添加字段的值
- 扩展 Ext.data.Model(动态添加字段)
- 如何使用角度 JS 添加嵌套的添加字段
- 如何在 CKeditor 上传中向 POST 值添加字段
- 在流星中向用户集合添加字段的正确方式
- 按数组分组并在主数组中添加字段和子数组
- 如何在JavaScript中为HTML上的动态添加字段执行乘法
- 如何在javascript中为html上的动态添加字段匹配id
- 在具有嵌套属性的轨道中动态添加字段
- 使用jquery添加字段