我有一个包含具有值的对象的数组,例如:
[{
item: '123A',
meta: {}
},
{
item: '123A',
meta: {}
},
{
item: '123B',
meta: {}
}
,{
item: '123A',
meta: {}
}]
我想知道是否有一种方法可以查询相同匹配项目的百分比最高百分比。
例如,在这种情况下,最高匹配项目是 123A
,因此我想返回该项目在数组中找到的百分比,即 0.75
.
我希望能够对此进行查询,因此我最终可以按最低百分比或最高百分比进行排序。
我想一定有聚合的方法,但我真的不确定。
任何建议都会很棒。
最佳答案
可以进行聚合,但您需要包含一个 $unwind
运算符在 $group
之前 规范化/展平数组的步骤,以便您可以使用 $group
执行必要的聚合。 运算符。
考虑以下聚合操作,它将为您提供最终结果中的百分比计算,这假设您的文档具有最低限度的架构示例:
{
_id: 1,
arr: [
{ item: '123A', meta: {} },
{ item: '123A', meta: {} },
{ item: '123B', meta: {} },
{ item: '123A', meta: {} }
]
}
运行流水线
var pipeline = [
{
"$project": {
"arr": 1,
"arrSize": { "$size": "$arr" }
}
},
{ "$unwind": "$arr" },
{
"$group": {
"_id": "$arr.item",
"count": { "$sum": 1 },
"total": { "$first": "$arrSize" }
}
},
{
"$project": {
"item": "$_id",
"_id": 0,
"percentage":{
"$multiply": [
{ "$divide": [ 100, "$total" ] }, "$count"
]
}
}
}
];
db.test.aggregate(pipeline);
示例输出
{ "item" : "123A", "percentage" : 75 }
{ "item" : "123B", "percentage" : 25 }
关于node.js - 数组中不匹配值的 MongoDB 百分比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35461029/