【发布时间】:2021-12-29 06:18:01
【问题描述】:
首先,我将显示存储在mongodb 中的状态。
如您所见,它是一个结构,其中包含一个名为replies 的列表,位于一个名为comments 的列表中。在replies 内部有一个名为likes 的数组。
comments : [
Object1 : {
replies : [
likes : [
0 : {},
1 : {}
]
]
},
Object2 : {
replies : [
likes : [
0 : {},
1 : {}
]
]
}
]
我在这里要做的是仅从特定replies 结构内的likes 数组中插入/减去一个值。我目前正在使用 Spring Boot,并尝试了以下方法:
Query query = new Query();
Criteria criteria = Criteria.where("_id").is(new ObjectId(postId))
.andOperator(Criteria.where("comments")
.elemMatch(Criteria.where("_id").is(new ObjectId(commentId))
.andOperator(Criteria.where("replies")
.elemMatch(Criteria.where("_id").is(new ObjectId(replyId)))
)
)
);
query.addCriteria(criteria);
Update update = new Update();
if (state) {
// remove user id
update.pull("comments.$[].replies.$.likes", new ObjectId(userId));
} else {
// add user id
update.push("comments.$[].replies.$.likes").value(new ObjectId(userId));
}
mongoTemplate.updateFirst(query, update, MyEntity.class);
根据布尔值state添加或删除userId的操作。作为尝试的结果,最多找到一个特定的comment,但userId 无条件地进入comment 内replies 列表的第一个likes 列表中。我想要的是进入特定reply 内的likes 列表。我在update.push() 中使用了错误的参数吗?如果您能告诉我如何解决它,我将不胜感激。
【问题讨论】:
标签: spring-boot mongotemplate criteriaquery