gpt4 book ai didi

java - 使用 Java 更新 MongoDB 中的嵌入文档

转载 作者:行者123 更新时间:2023-12-02 05:39:38 24 4
gpt4 key购买 nike

我是 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",
}


]
}

所以我想做的是向每门类(class)添加一个新字段(对于学生集合中的每个学生),该字段将被称为模块,这就是我尝试过的:

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);
}

但是,这会向类(class)数组(而不是每门类(class))添加新元素。我不知道如何循环遍历这个数组,向该数组中的每个对象添加一个字段,因此我们将不胜感激。

最佳答案

$push 运算符附加 a new element进入数组。这就是为什么您的 Collection 添加了新元素。一种解决方案是用 $set 运算符替换整个数组。您迭代学生,并为每个学生的类(class)将 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))
);
}

关于java - 使用 Java 更新 MongoDB 中的嵌入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24616306/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com