0

I am trying to update an entry ("propertyOne") in a nested array.

The structure looks as follows:

Object structure

Updating the entry "name" in "itemlist" already works:

    ...

    fileRepositoryEntity.updateNestedObject("randomitemid", "randompropertyid")
    
    ...

    override fun updateNestedObject(id1list: String, id2list: String): Mono<FileEntity>  {

       val cX = Criteria.where("testobj.itemList._id").`is`(id1list)
       var qX = query(cX)
       val uX: Update = Update().set("testobj.itemList.$.name", "newname")

       return mongoTemplate.findAndModify(qX,uX,FileEntity::class.javaObjectType);
    }

But how could I update propertyOne?

1 Answers1

0

It looks like I found a solution (Update only specific sub document deep in nested array of array of documents)

override fun updateNestedObject(id1list: String, id2list: String): Mono<FileEntity>  {

    val c2 = Criteria.where("testobj.itemList.propertyList._id").`is`(id2list)
    var q2 = query(c2)
    val fA1 = Criteria.where("elem1._id").isEqualTo(id1list)
    val fA2 = Criteria.where("elem2._id").isEqualTo(id2list)
    val u2: Update = Update().set("testobj.itemList.$[elem1].propertyList.$[elem2].propertyOne", "newPropertyVaue").filterArray(fA1).filterArray(fA2)
    return mongoTemplate.findAndModify(q2,u2,FileEntity::class.javaObjectType);

}