【发布时间】:2021-11-04 21:34:03
【问题描述】:
示例文档
{
"user_id": "1",
"key": "key1",
"percent": 95
},
{
"user_id": "1",
"key": "key1",
"percent": 50
},
{
"user_id": "1",
"key": "key2",
"percent": 50
},
{
"user_id": "1",
"key": "key3",
"percent": 50
},
{
"user_id": "1",
"key": "key3",
"percent": 70
}
我想提取百分比小于 95 的文档。
当有多个文档具有特定键时,一个大于 95,一个小于 95,则不能显示具有该键的文档。 (上例中,key1对应。因为一个大于95,另一个小于95。)
如果所有多个文档的百分比都低于95,则必须提取百分比最高的文档。
我使用的当前查询
db.test.aggregate([
{
"$match": {
"percent": {
"$lte": 95
},
"user_id": {
"$eq": user_id,
},
}
},
{
"$group": {
"_id": "$key",
"max": {"$max": "$percent"}
}
},
{
"$project": {
"_id": 1,
"percent": "$max"
}
},
])
结果
{"key": "key1", "percent": 50}
{"key": "key2", "percent": 50}
{"key": "key3", "percent": 70}
根据上述条件,key1 应从结果中排除,因为存在百分比为 95 或更高的文档。
预期结果
{"key": "key2", "percent": 50}
{"key": "key3", "percent": 70}
这个问题可以用MongoDB的查询解决吗?
谢谢!
【问题讨论】:
-
您可以尝试在分组之后(而不是之前)检查百分比匹配。
-
@prasad_ 正确!更改匹配查询的顺序后,它可以完美运行。谢谢:)