在嵌套数组mongo db Springboot中更新数组元素

时间:2020-07-31 21:00:11

标签: java spring mongodb mongodb-query aggregation-framework

我有一个如下所示的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

任何帮助将不胜感激。 谢谢!

0 个答案:

没有答案