mongodb - Mongo 聚合组和匹配
问题描述
是否可以按 uuid 分组以查找最大版本然后过滤标志?我希望先找到版本 3,然后查看它是否有标记“Y”。似乎在分组之前应用了过滤器,因此我得到的是版本 1。
{"uuid" : 1, "version" : 1, "name" : "Bob", "flag" : "Y"}
{"uuid" : 1, "version" : 2, "name" : "Bob", "flag" : "N"}
{"uuid" : 1, "version" : 3, "name" : "Bob", "flag" : "N"}
提前致谢 !!
解决方案
这是一种方式,如果我明白你的想法:
db.collection.aggregate({
$group: {
_id: "$uuid",
docs: {
$push: "$$ROOT"
},
"max_version": {
"$max": "$version"
}
}
},
{
$addFields: {
docs: {
"$filter": {
"input": "$docs",
"as": "d",
"cond": {
$eq: [
"$$d.version",
"$max_version"
],
$eq: [
"$$d.flag",
"Y"
]
}
}
}
}
})
主意
- $group by uuid 并提取组中的最大值
version
。 - 过滤文档数组中的 a
max_version
和flag
推荐阅读
- powershell - 如何为每个 npm 脚本打开多个拆分终端?
- python - Kapitza 振荡器动画太慢且不稳定
- gnuplot - Gnuplot - 设置一个函数
- python - 有没有办法可以配对一个以后可以自行删除的数组的内容?(秘密圣诞老人计划)
- python-3.x - 在不同变量中分配 While 循环的值的问题
- resteasy - RESTEASY002020:quarkus 1.0 Final 和 RestEeasy JAX-RS 资源未处理的异步异常
- sql - 运行 Spark SQL 查询的问题 - 未找到列
- process - VHDL,过程不更新变量的值,实现合并排序
- android - Android 应用与 Node.Js 服务器和 MongoDB 通信
- javascript - 使用 javascript 读取获取请求参数