任何人都可以帮助处理MongoTemplate问题吗? 我有一个具有嵌套数组的记录结构,我想更新第二级数组中的特定条目。我可以通过Set路径需要两个数组条目的索引来更容易地找到适当的条目。 '$'仅指叶项。例如,如果我有一组包含一系列玩家的团队,我需要生成一个更新路径,如:
val query = Query(Criteria.where( "teams.players.playerId").`is`(playerId))
val update = Update()
with(update) {
set("teams.$.players.$.name", player.name)
这失败了因为'$'只能用一次来引用players数组中的索引,我需要一种方法来为teams数组中的索引生成等价的'$'。
我在想我需要使用类似的东西来使用单独的聚合查询,但我无法让它工作。
project().and(ArrayOperators.arrayOf( "markets").indexOf("")).`as`("index")
对于这个Mongo新手的任何想法?
答案 0 :(得分:0)
对于其他面临类似问题的人,一种选择是在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))
));