繁体   English   中英

使用Spring MongoTemplate更新MongoDB中的嵌套数组

[英]Using Spring MongoTemplate to update nested arrays in MongoDB

任何人都可以帮助解决MongoTemplate问题吗? 我有一个具有嵌套数组的记录结构,并且我想更新第二级数组中的特定条目。 我可以通过Set路径同时需要两个数组条目的索引和“ $”仅引用叶项来轻松找到合适的条目。 例如,如果我有一组包含一组玩家的团队,则需要生成一个更新路径,例如:

val query = Query(Criteria.where( "teams.players.playerId").`is`(playerId))
val update = Update()
with(update) {
    set("teams.$.players.$.name", player.name)

这失败了,因为“ $”只能用于引用玩家数组中的索引,我需要一种方法来为teams数组中的索引生成等效的“ $”。

我在想我需要使用类似这样的单独的聚合查询,但是我无法使其正常工作。

project().and(ArrayOperators.arrayOf( "markets").indexOf("")).`as`("index")

这个Mongo新手有什么想法吗?

对于其他面临类似问题的人,一种选择是在UpdateOptions中使用arrayFilters。 但是看起来春季的mongotemplate尚不直接支持UpdateOptions的使用。 因此,可以做的是: Sample for document which contain object with arrays of arrayObj (which contain another arrays of arrayObj).

Bson filter = eq("arrayObj.arrayObj.id", "12345");
UpdateResult result = mongoTemplate.getDb().getCollection(collectionName)
            .updateOne(filter,
                    new Document("$set", new Document("arrayObj.$[].arrayObj.$[x].someField"), "someValueToUpdate"),
                    new UpdateOptions().arrayFilters(
                            Arrays.asList(Filters.eq("x.id, "12345))
                    ));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM