MongoDB:如何使用新的复杂项更新数组的复杂项

时间:2014-03-06 16:37:18

标签: mongodb

以下是我的假设用户集合,其中允许多个地址:

{
  "firstName": "Joe",
  "lastName": "Grey",
  ...
  "addresses":
  [
    {
      "name": "Default",
      "street": "...",
      ...,
      "isDefault": true
    },
    {
      "name": "Home",
      "street": "...",
      ...,
      "isDefault": false
    },
    {
      "name": "Office",
      "street": "...",
      ...,
      "isDefault": false
    }
  ]
}

假设我想使用以下新项更新第二个地址(Home):

   {
      "name": "New home",
      "street": "Ruta del Sol"
    },

如何使用新项目更新数组的第二项,同时考虑新项目是否可能提供地址的所有字段?

this post中将向我展示如何更新给定索引处的字段,确保地址名称保持唯一。现在,我想更新整个项目,而不是更新单个字段。

2 个答案:

答案 0 :(得分:1)

您需要做的就是转换新的json数据以进行更新。例如:

让我们假设您有新的Json数据,只有两个字段'name'和'isDefault'。

var newData = {"name" : "New Val","isDefault":true};
var updateData = {};
for (key in newData ) {
      updateData["addresses.$."+key]=newData[key]; 
};
db.projectPlan.update({_id:1, 'addresses.name': 'Home'}, {$set:updateData});

答案 1 :(得分:0)

var renamed = 'Office'; // from user input
var users = getUserMongoCollection();    

var address = {
 name: "Office,
 street: "Ruta del Sol"
};

users.update({_id:userId },
    { $set : { 'addresses.1' : address } }, function(err){
        //all done!
    });