如何在数组(包含对象)中向对象添加属性?

时间:2014-04-16 11:26:35

标签: mongodb mongodb-query

我正在尝试更新(如果不存在的话)一个属性到mongodb文档中数组中的每个对象。例如

我的文件:

{
     "_id" : "1",
     student : [
               {
                  "name" : "rajesh",
                   "rollno" : 1
               },
              {
                   name" : "rajesh2",
                   "rollno" : 2
              },
              {
                   name" : "rajesh3",
                   "rollno" : 3,
                   class : 6
             }
       ]
  }

我想添加属性' class'到学生数组中的所有对象。 我怎么能在mongodb中这样做。

1 个答案:

答案 0 :(得分:5)

是和否。

如果您知道数组中项目的索引,则相对简单:

db.collection.update(
    { "_id": 1 },
    { "$set": {
        "student.0.class": 4,
        "student.1.class": 5,
        "student.2.class": 6
    }}
)

但是如果你真的想要更新未知长度的所有数组值,这在单次更新中是不可能的,所以你需要实际检索文档并首先修改整个数组:

db.collection.find({ _id: 1}).forEach(function(doc) {
    for (var i=0; i < doc.student.length; i++) {
        doc.student[i] = newValue;
    }
    db.collection.update(
        { _id: doc._id },
        { "$set": { "student": doc.student } }
    );    
})

或者基本上沿着这些方向采取一些方法。

适当了解它们的限制和代码。