【问题标题】:MongoTemplate - Update entry in a nested arrayMongoTemplate - 更新嵌套数组中的条目
【发布时间】:2020-10-15 16:24:33
【问题描述】:

我正在尝试更新嵌套数组中的条目(“propertyOne”)。

结构如下:

更新“itemlist”中的“name”条目已经可以了:

    ...

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

但是如何更新 propertyOne?

【问题讨论】:

    标签: arrays nested mongotemplate findandmodify


    【解决方案1】:

    看来我找到了解决方案 (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);
    
    }
    

    【讨论】:

    • 如果两个列表(itemList和propertyList)中都有propertyOne,就会出错
    • 在这种情况下,您可以使用以下命令:val u2: Update = Update().set("testobj.itemList.$.propertyList.$[elem2].propertyOne", "newPropertyVaue")。 filterArray(fA2)
    猜你喜欢
    • 2020-04-15
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 2023-04-03
    • 2019-02-25
    • 2011-05-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多