我正在尝试更新(如果不存在的话)一个属性到mongodb文档中数组中的每个对象。例如
我的文件:
{
"_id" : "1",
student : [
{
"name" : "rajesh",
"rollno" : 1
},
{
name" : "rajesh2",
"rollno" : 2
},
{
name" : "rajesh3",
"rollno" : 3,
class : 6
}
]
}
我想添加属性' class'到学生数组中的所有对象。 我怎么能在mongodb中这样做。
答案 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 } }
);
})
或者基本上沿着这些方向采取一些方法。
适当了解它们的限制和代码。