在嵌套数组上更新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) {} ) 

这使您可以标识数组中的元素以更新,而不显式指定数组中元素的位置。