javascript - mongodb 更新 JSON 数组

标签 javascript node.js mongodb nosql

我在 Mongo 中有这些数据:

{'_id':1,
             'name':'Root',
             'taskId':1,
             'parentId':"",
             'path':[1],
             'tasks':[  {"taskId":3,parentId:1,name:'A',type:'task'},
                        {"taskId":4,parentId:1,name:'D',type:'task'},
                        {"taskId":5,parentId:4,name:'B',type:'task'},
                        {'type':'project' , 'proRef':2},
                        {"taskId":6,parentId:3,name:'E',type:'task'},
                        {"taskId":7,parentId:6,name:'C',type:'task'}]

            }

现在我想用新的 Json 数据更新 taskId 6 。

var jsonData = {"taskId":6,"name":'Sumeet','newField1':'Val1','newField2':'Val2'}

如果字段可用,则查询应更新,否则将新 key 添加到现有的.Output Like

{"taskId":6,parentId:3,name:'Sumeet',type:'task','newField1':'Val1','newField2':'Val2'}]

我尝试了一些查询,但它完全取代了 json 。

 db.projectPlan.update({_id:1,'tasks.taskId':6},{$set :{'tasks.$':jsonData }});

预先感谢您的帮助! 苏梅特

最佳答案

您需要将 jsonData 变量转换为可以传递更新的内容。下面的示例可以完全满足您对示例文档的要求:

var updateData = {};
for (f in jsonData) {
    if (f != "taskId") updateData["tasks.$."+f]=jsonData[f]; 
};
db.projectPlan.update({_id:1, 'tasks.taskId':6}, {$set:updateData})

结果:

{ "_id" : 1, 
  "name" : "Root",
  "taskId" : 1,
  "parentId" : "",
  "path" : [  1 ],
  "tasks" : [
    {   "taskId" : 3,   "parentId" : 1,     "name" : "A",   "type" : "task" },
    {   "taskId" : 4,   "parentId" : 1,     "name" : "D",   "type" : "task" },
    {   "taskId" : 5,   "parentId" : 4,     "name" : "B",   "type" : "task" },
    {   "type" : "project",     "proRef" : 2 },
    {   "taskId" : 6,   "parentId" : 3,     "name" : "Sumeet",  "type" : "task",    "newField1" : "Val1",   "newField2" : "Val2" },
    {   "taskId" : 7,   "parentId" : 6,     "name" : "C",   "type" : "task" } 
] }

关于javascript - mongodb 更新 JSON 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20551818/

相关文章:

javascript - 谷歌地图信息窗口打不开

javascript - 加载时增量 JQuery 函数

c# - Json.NET 反序列化 Mongo ObjectId 给出了错误的结果

javascript - 如何根据 URI 是否在生产环境中将其设置为变量

$lookup 的 Mongodb 聚合参数必须是字符串

javascript - offsetParent 暂时消失

javascript - iPhone 日期字段 - 更改日期格式

node.js - NodeJS路由: all routes with authentication except first page

performance - ExpressJS压力测试

node.js - 在 API 上使用哈希密码进行 Pass 简单例份验证