我正在使用MongoDB,我有以下记录:
{ 名称:“a”, 状态: [ {年龄:15岁,关闭:真}, {年龄:38岁,已结束:真}, {年龄:42岁,关闭:假}, ]},{ …
您可以使用 $ arrayElemAt 并通过 -2 作为最后一个元素之前的参数( -1 代表最后一个),
-2
-1
如果为负数,则$ arrayElemAt返回idx位置的元素,从数组的末尾开始计算。
尝试:
db.col.aggregate([ { $addFields: { beforeLast: { $arrayElemAt: [ "$status", -2 ] } } }, { $match: { "beforeLast.age": 29 } }, { $project: { beforeLast: 0 } } ])
编辑:或者你可以使用 $ EXPR 同 $让 用于定义临时变量的关键字:
db.col.find({ $expr: { $eq: [ 29, { $let: { vars: { beforeLast: { $arrayElemAt: [ "$status", -2 ] } }, in: "$$beforeLast.age" } } ] } })