MongoDB中如何按嵌套数组的最后一个元素进行过滤?
问题原因与解决方案
你的操作是错误的,MongoDB不支持直接用-1作为数组索引来查询最后一个元素。
为什么原写法无效?
MongoDB的查询语法中,数组索引必须是非负整数(比如"Test.Array.0"表示数组第一个元素)。当你写"Test.Array.-1"时,MongoDB会把-1当成一个字符串类型的字段名,它会尝试在Test.Array这个数组的元素里查找是否存在键为"-1"的子文档,而你的数据里并没有这样的结构,所以自然查不到结果。
正确的查询方式
根据你的MongoDB版本,有两种可靠的实现方式:
方式1:使用$last(MongoDB 4.4+)
$last操作符可以直接获取数组的最后一个元素,结合$expr在查询中使用聚合表达式:
{ "$expr": { "$gte": [ { "$last": "$Test.Array" }, NumberInt("10") ] } }
方式2:使用$arrayElemAt(MongoDB 3.2+)
$arrayElemAt支持用负索引定位数组元素(-1即最后一个),同样结合$expr:
{ "$expr": { "$gte": [ { "$arrayElemAt": ["$Test.Array", -1] }, NumberInt("10") ] } }
内容的提问来源于stack exchange,提问作者Husker
相关产品推荐
相关产品推荐

