在嵌套数组上更新mongoDb集合
我有这样的JSON。 我想添加一个代理技术departmentName
就像它是如何支持。 我一直试图与$push
并添加设置,但没有帮助。
这是我曾经试过的:
var depName = "Support"; // i get this from a form db.collection('departments').update( { "departments.departmentName": depName }, { $addToSet: { "departmentName": depName, "agents": { "agentName": "xxx", "agentNumber": "xxx" } } }, function(err,result) { } );
和这个
db.collection('departments').update( { "departments.departmentName": depName }, { $addToSet: { "agents": { "agentName": "xxx", "agentNumber": "xxx" } } }, function(err,result) { } );
我想如何写这个查询
{ "_id": { "$oid": "578f6377dcba0f1ad368b7bb" }, "name": "xxx", "departments": [ { "departmentName": "Support", "agents": [ { "agentName": "xxx", "agentNumber": "xxx" }, { "agentName": "xxx", "agentNumber": "xxx" } ] }, { "departmentName": "Technical" }, { "departmentName": "Customer Care" } ] }
最终的结果应该是这样的:
{ "_id": { "$oid": "578f6377dcba0f1ad368b7bb" }, "name": "xxx", "departments": [ { "departmentName": "Support", "agents": [ { "agentName": "xxx", "agentNumber": "xxx" }, { "agentName": "xxx", "agentNumber": "xxx" } ] }, { "departmentName": "Technical", "agents": [ { "agentName": "xxx", "agentNumber": "xxx" }, ] }, { "departmentName": "Customer Care" } ] }
您应该能够在更新中使用$ positional operator
,如下所示:
db.collection('departments').update( { "departments.departmentName": depName }, { "$addToSet": { "departments.$.agents": { "agentName": "foo", "agentNumber": "123" } } }, function (err, result) {} )
这使您可以标识数组中的元素以更新,而不显式指定数组中元素的位置。