node.js - 数组中不匹配值的 MongoDB 百分比

标签 node.js mongodb

我有一个包含具有值的对象的数组,例如:

[{
  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/

相关文章:

node.js - 如何在 Mongo 中为数组的元素定义唯一索引

javascript - Node.js GC 标记紧凑

node.js - for循环在nodejs中无法正常工作

javascript - 尝试将此字符串转换为对象

node.js - 如何从一个集合中具有不同状态的mongodb获取计数

javascript - 刷新 MongoDB 中的 token

javascript - 将 mongo 数据库连接导出到 models.js 文件

node.js - MongoDB:如何查询具有 `IS NOT(MAX())`条件的文档?

php - 如何使用 MongoDB 实现 "Group By"

javascript - (不正确的响应 NodeJS + Socket IO)NodeJS 在页面刷新时在套接字上多次写入数据