[英]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.