Spring Boot中MongoDB查询:匹配数组最后一个元素的taskState
Spring Boot中MongoDB匹配数组最后一个元素的查询实现
针对你需要查询stateHistory数组最后一个元素的taskState属于指定数组lastTaskStateIn的需求,有两种简洁的实现方式:
方式一:直接使用数组负索引
MongoDB支持通过负索引-1直接定位数组的最后一个元素,对应的Spring Data MongoDB查询代码如下:
query.addCriteria(Criteria.where("stateHistory.-1.taskState").in(lastTaskStateIn));
方式二:使用聚合表达式(适用于复杂场景)
如果需要更灵活的逻辑扩展,可以用$expr结合$last聚合操作符来获取数组最后一个元素的taskState,再判断是否在目标数组中:
import org.bson.Document; import java.util.Arrays; // ... query.addCriteria(Criteria.where("$expr") .expr(new Document("$in", Arrays.asList( new Document("$last", "$stateHistory.taskState"), lastTaskStateIn ))));
验证说明
- 当
lastTaskStateIn为["FINISH"]时,会匹配到你提供的示例文档; - 当
lastTaskStateIn为["DONE", "START"]时,不会匹配该文档,完全符合你的需求。
内容的提问来源于stack exchange,提问作者Leon
相关产品推荐
相关产品推荐

