我有一个如下所示的mongo文档
{
"_id": "5f2454679aca010e37c7b3c1",
"result" : {
2020_2021: [
{
term: 1,
subjects: [
{
subjectName: "Maths",
subjectCode: "AS-201",
marks: 65
},
{
subjectName: "Science",
subjectCode: "AS-202",
marks: 70
}
]
},
{
term: 2,
subjects: [
{
subjectName: "Maths",
subjectCode: "AS-201",
marks: 40
},
{
subjectName: "Science",
subjectCode: "AS-202",
marks: 90
}
]
}
]
}
}
我需要在“ term”和“ subjectCode”的基础上进行更新,如果存在subjectCode,那么主题数组的对象将被更新,否则将在主体数组中添加新的记录/文档。
例如:如果主题对象包含会话2020_2021中第2项的subjectCode AS-201(无需硬编码第一级数组的索引),则需要更新主题数组中的整个主题对象。 和 如果找不到带有subjectCode的相应主题文档,那么我需要将其插入相应的Subjects数组中。
我最终尝试了类似的方法,但是每次创建一个新对象时,即使subjectCode已经存在,也永远不会更新相应的文档。
Query q = new Query();
q.addCriteria(Criteria.where("_id").is("5f2454679aca010e37c7b3c1").and("result.term").is(2)
.and("result.2020_2021.subjects.subjectCode").is("As-201"));
Update update = new Update();
update.addToSet("result.2020_2021.$.subjects", subjectObj);
UpdateResult updateResult = template.updateFirst(q,update,Results.class);
also tried to upsert
//template.upsert(q,update,Results.class); but no luck
任何帮助将不胜感激。 谢谢!