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

raj*_*war 7 mongodb mongodb-query

我试图更新(添加,如果不存在)一个属性到mongodb文档中的数组中的每个对象.例如

我的文件:

{
     "_id" : "1",
     student : [
               {
                  "name" : "rajesh",
                   "rollno" : 1
               },
              {
                   name" : "rajesh2",
                   "rollno" : 2
              },
              {
                   name" : "rajesh3",
                   "rollno" : 3,
                   class : 6
             }
       ]
  }
Run Code Online (Sandbox Code Playgroud)

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

Nei*_*unn 6

是的,不是.

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

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

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

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 } }
    );    
})
Run Code Online (Sandbox Code Playgroud)

或者基本上沿着这些方向的一些方法

适当地了解它们的局限性和代码.