Mongodb 具有记录优先级的Mongo组聚合
我正在尝试执行MongoDB 3.6聚合,但我无法找到正确的方法 问题如下。在执行了几个聚合步骤后,我得到的结果集如下:Mongodb 具有记录优先级的Mongo组聚合,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我正在尝试执行MongoDB 3.6聚合,但我无法找到正确的方法 问题如下。在执行了几个聚合步骤后,我得到的结果集如下: [ { _id: { month: 1, type: 'estimate' }, value: 50 }, { _id: { month: 2, type: 'estimate' }, value: 40 }, { _id: { month: 3, type: 'estimate' }, value: 35 }, { _id: { month: 3, type
[
{ _id: { month: 1, type: 'estimate' }, value: 50 },
{ _id: { month: 2, type: 'estimate' }, value: 40 },
{ _id: { month: 3, type: 'estimate' }, value: 35 },
{ _id: { month: 3, type: 'exact' }, value: 33.532 },
{ _id: { month: 4, type: 'estimate' }, value: 10 },
{ _id: { month: 4, type: 'exact' }, value: 11.244 },
]
它包含按月份分组的值。每个月的价值可以是“估计”或“精确”。现在,我想减少这一结果,以实现这一点:
[
{ _id: { month: 1 }, value: 50 },
{ _id: { month: 2 }, value: 40 },
{ _id: { month: 3 }, value: 33.532 },
{ _id: { month: 4 }, value: 11.244 },
]
基本上,我希望尽可能使用'exact'类型的值,并且只在不知道'exact'的月份回退到'estimate'值
任何帮助或提示都将不胜感激。我希望在数据库中而不是在服务器上执行聚合。您可以简单地通过键入
,然后在下一阶段使用,这将为您提供精确的
(如果存在)和估计
。尝试:
db.col.aggregate([
{
$sort: { "_id.type": -1 }
},
{
$group:{
_id: "$_id.month",
value: { $first: "$value" }
}
},
{
$sort: { _id: 1 }
}
])
印刷品:
{ "_id" : 1, "value" : 50 }
{ "_id" : 2, "value" : 40 }
{ "_id" : 3, "value" : 33.532 }
{ "_id" : 4, "value" : 11.244 }
因此,按类型排序
在这里被视为优先排序,因为我们知道,在估计之前,在词汇上精确的
。您还可以更明确地添加名为权重
(使用)运算符计算的额外字段,然后按该权重排序:
db.col.aggregate([
{
$addFields: {
weight: { $cond: [ { $eq: [ "$_id.type", "exact" ] }, 2, 1 ] }
}
},
{
$sort: { "weight": -1 }
},
{
$group:{
_id: "$_id.month",
value: { $first: "$value" }
}
},
{
$sort: { _id: 1 }
}
])