arrays - Mongodb 聚合:$reduce 未按预期工作
问题描述
我有一个$reduce
没有按预期工作的 mongodb 聚合管道。这就是我想要达到的目标。
基本上我试图获取给定属性中具有最高值的对象。在某些对象$reduce
中返回错误的对象,在其他对象中返回null
,这意味着没有对象满足条件。
我的代码有小组阶段和其他阶段,它们产生阶段中使用的变量$reduce
。聚合管道中是否有任何已知的可能影响该阶段的先前阶段$reduce
?
解决方案
$max
key
从字段数组中获取最大值a
,这将-15
根据您的文档返回$filter
获取等于-15
值的对象$first
从返回的结果中获取第一个对象$filter
db.collection.aggregate([
{
$addFields: {
winner: {
$first: {
$filter: {
input: "$key",
cond: { $eq: ["$$this.a", { $max: "$key.a" }] }
}
}
}
}
}
])
使用运算符的第二个选项$reduce
,
- 在reduce中设置初始字段,字段数组中的
maxValue
最大值key
a
- 检查条件是否
maxValue
和a
值匹配然后返回最大对象
db.collection.aggregate([
{
$addFields: {
winner: {
$reduce: {
input: "$key",
initialValue: { maxValue: { $max: "$key.a" } },
in: {
$cond: [
{ $eq: ["$$this.a", "$$value.maxValue"] },
"$$this",
"$$value"
]
}
}
}
}
}
])
推荐阅读
- python-3.x - 满足条件时出现按钮
- ios - 无法为 AVAudioSession 设置类别
- wpf - ItemsControl 中的不同控件
- pysnmp - 如何为 pysnmp 中的给定请求编写代理端响应代码,例如 get-request 以及所需的先决条件
- android - 如何在移动应用中为用户创建应用内社区
- security - 谷歌分析和子资源完整性
- c++ - Arduino ESP32 如何将 BLEUUID 对象分配到字符串中
- python-3.x - 如何在 python 和 tkinter 中创建透明文本小部件?
- android - 通过 dataSnapshot.getKey() 查询来自 2 个不同节点的数据
- ios - 如何更新两个视图控制器上的圆形进度按钮?我正在将单例类用于循环进度按钮