Sum*_*eet 0 javascript mongodb nosql node.js
我在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'}]
}
Run Code Online (Sandbox Code Playgroud)
现在我想用新的Json数据更新taskId 6.
var jsonData = {"taskId":6,"name":'Sumeet','newField1':'Val1','newField2':'Val2'}
Run Code Online (Sandbox Code Playgroud)
如果字段可用,则查询应更新,否则将新密钥添加到现有.Output Like
{"taskId":6,parentId:3,name:'Sumeet',type:'task','newField1':'Val1','newField2':'Val2'}]
Run Code Online (Sandbox Code Playgroud)
我尝试了很少的查询,但它完全取代了json.
db.projectPlan.update({_id:1,'tasks.taskId':6},{$set :{'tasks.$':jsonData }});
Run Code Online (Sandbox Code Playgroud)
在此先感谢您的帮助!Sumeet
您需要将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})
Run Code Online (Sandbox Code Playgroud)
结果:
{ "_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" }
] }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3901 次 |
| 最近记录: |