javascript - MongoDB查找字段不存在的所有文档,加上如果存在则应用字段运算符($ max)条件
问题描述
$match
我正在为我的聚合中的一个阶段寻找一个查询,它与这个问题几乎相同,但是..
结果应该是这样的:
[
{
"method": 3,
"item": 1,
"rank": 3 //because it has field named rank, and suits condition {rank: $max}
},
{
"method": 4,
"item": 1 //we need this, because document doesn't have rank field at all
},
{
"method": 5,
"item": 1 //we need this, because document doesn't have rank field at all
}
]
我已经尝试过的事情:
{
$match: {
$or: [
{item: id, rank: {$exists: true, $max: "$rank"}}, //id === 1
{item: id, rank: {$exists: false}} //id === 1
]
}
}
UPD:就目前而言,可能我不仅限于
$match
阶段,$project
默认匹配后也相关,所以我可以在$match
阶段请求每个文档,id
无论是否有 docrank
字段,然后在$project
阶段做一个“按等级分离”$exists
解决方案
试试这个:
db.collection.aggregate([
{
$match: {
item: id
}
},
{
$group: {
_id: "$item", //<- Change here your searching field
max: {
$max: "$rank" //<- Change here your field to apply $max
},
data: {
$push: "$$ROOT"
}
}
},
{
$unwind: "$data"
},
{
$match: {
$expr: {
$or: [
{
$eq: [
{
$type: "$data.rank"
},
"missing"
]
},
{
$eq: [
"$data.rank",
"$max"
]
}
]
}
}
},
{
$replaceWith: "$data"
}
])
推荐阅读
- join - 客户端通信层从 Advantage 数据库服务器收到的数据比预期的要多
- c - 我如何在c中得到“异常抛出错误”
- python - 比较两个不均匀的列表元组
- r - 创建多个时差变量的最佳方法
- gatsby - 为 facebook og:image images 生成带有“in-image-padding”的图像
- c# - WPF C# 组合框空白 SelectedItem SelectedValue
- php - 具有相同值的 PHP 表单验证
- java - 如何将组合函数转换为反应式管道?
- ios - 在表格的某些单元格中应用颜色
- javascript - 如何修复“无法向该用户发送消息”DiscordAPIError?