我是Mongo的新手,我正在尝试向Mongo中的对象数组添加新字段。我有一个学生集合里面有学生对象。这是我的文档的样子:
Student{
"id":"...",
"Name":"...",
"username":"...",
"courses":[
{
"course name":"English",
"course id":"ENC1101",
},
{
"course name":"Math",
"course id":"MA1453",
},
{
"course name":"Biology",
"course id":"BA1403",
}
]
}
所以我想做的是为每个课程(对于学生集合中的每个学生)添加一个新字段,这个字段将被称为模块,这就是我尝试过的:
DBCursor cursor = students.find();
while(cursor.hasNext()) {
BasicDBObject modules = new BasicDBObject("modules", "moduleID");
BasicDBObject courses = new BasicDBObject("courses", modules);
BasicDBObject withSet = new BasicDBObject("$push", courses);
students.update(cursor.next(), withSet);
}
然而,这会为课程数组添加新元素,而不是每门课程。我不知道如何循环遍历这个数组添加一个字段到这个数组中的每个对象,所以任何帮助将不胜感激。
答案 0 :(得分:2)
$push
运算符将a new element附加到数组中。这就是为您的集合添加新元素的原因。一种解决方案是用$set
运算符替换整个数组。你迭代学生和每个学生'当然,您将moduleId
附加到course
元素:
DBCursor cursor = students.find();
while (cursor.hasNext()) {
final DBObject student = cursor.next();
BasicDBList courses = (BasicDBList) student.get("courses");
for (Object course : courses) {
((BasicDBObject) course).append("modules", "moduleID");
}
students.update(
new BasicDBObject("id","test"), //update query
new BasicDBObject("$set", new BasicDBObject("courses", courses))
);
}