gpt4 book ai didi

mongodb - $elemMatch 用于最后一个元素而不是第一个

转载 作者:可可西里 更新时间:2023-11-01 10:45:16 27 4
gpt4 key购买 nike

我正在尝试查找与条件匹配的数组的最后一个元素,例如,如果我有来自 $elemMatch 的数据页:

{
_id: 1,
students: [
{ name: "john", school: 102, age: 10 },
{ name: "jess", school: 102, age: 11 },
{ name: "jeff", school: 108, age: 15 }
]
}

我想找到最后一个包含 school: 102 的元素,在这种情况下我会得到 { name: "jess", school: 102, age: 11 } 。但是 $elemMatch 将返回 john

我觉得应该有一个简单的方法来做到这一点,但如果不使用 $unwind 和复杂的聚合就找不到任何解决方案。

有什么想法吗?

最佳答案

您可以使用 $filter仅获取来自学校 102 的学生,然后是 $slice使用 -1 从过滤后的数组中获取最后一个元素。为了使其尽可能短,您可以使用 $let要定义临时变量,请尝试:

db.col.aggregate([
{
$addFields: {
students: {
$let: {
vars: {
filtered: { $filter: { input: "$students", as: "s", cond: { $eq: [ "$$s.school", 102 ] } } }
},
in: { $slice: [ "$$filtered", -1 ] }
}
}
}
}
])

关于mongodb - $elemMatch 用于最后一个元素而不是第一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54068565/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com