Mongodb 计算数组中项目的组合

jnh123

我有类似的东西:`

[
{
    ....
    tags : ["A","B"]
},
{
    ....
    tags : ["A","B"]
},
{
    ....
    tags : ["J","K"]
},
{
    ....
    tags : ["A","B","C"]
}
]`

使用聚合框架,我想按数组组合进行分组以获得如下内容:

[
{
    _id:["A","B"],
    count : 3
},
{
    _id:["J","K"],
    count : 1
},
{
    _id:["A","C"],
    count : 1

   },
{
        _id:["B","C"],
        count : 1
    },
]

是否可以?提前致谢

塔基斯_

询问

  • 对于大小为 1 的每个标签,使其成为["V"] -> ["V" null](如果您不想用 null 计算对,您可以在最终结果中过滤掉)
  • 地图,对于每个成员,我们将其与其他成员一起说,例如["A" "B" "C"]将“A”与["B" "C"]“B”与["A" "C"]等(我们计算双倍,接下来将除以 2)
  • 展开那个数组
  • 按对分组,但对短路 ["A" "B"] = ["B" "A"]
  • 取计数 0.5(而不是 1)(就像我们除以 2)

测试代码在这里

aggregate(
[ {
  "$set" : {
    "tags" : {
      "$cond" : [ {
        "$eq" : [ {
          "$size" : "$tags"
        }, 1 ]
      }, {
        "$concatArrays" : [ "$tags", [ null ] ]
      }, "$tags" ]
    }
  }
}, {
  "$set" : {
    "a" : {
      "$map" : {
        "input" : "$tags",
        "in" : {
          "member" : "$$t",
          "togetherWith" : {
            "$setDifference" : [ "$tags", [ "$$t" ] ]
          }
        },
        "as" : "t"
      }
    }
  }
}, {
  "$unwind" : {
    "path" : "$a"
  }
}, {
  "$replaceRoot" : {
    "newRoot" : "$a"
  }
}, {
  "$unwind" : {
    "path" : "$togetherWith"
  }
}, {
  "$group" : {
    "_id" : {
      "$cond" : [ {
        "$lt" : [ "$member", "$togetherWith" ]
      }, [ "$member", "$togetherWith" ], [ "$togetherWith", "$member" ] ]
    },
    "count" : {
      "$sum" : 0.5
    }
  }
}, {
  "$set" : {
    "count" : {
      "$toInt" : "$count"
    }
  }
} ]
)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

MongoDB计算数组中的不同项目

使用mongodb聚合框架计算数组中的项目出现次数

计算数组中的总和并对 mongodb 进行排序

MongoDB - 如何按日期分组并计算数组中的元素

如何在mongodb中计算数组中的对象?

MongoDB,计算多个数组中每个项目的出现次数

计算MongoDB中的项目

计算数组中的元素数量并为mongodb中集合的每个文档求和?

MongoDB和Mongo图表:如何计算数组中前一项的增量?

从对象数组中的嵌套项目中计算数组中项目的出现次数javascript

如何在MongoDB中计算数组重复元素

MongoDB聚合:计算数组元素或距离之间的差异

计算数组中评分的平均值,然后将字段添加到MongoDB中的原始文档

如何使用 reduce() 计算数组中每个项目的折扣?

如何计算数组中已识别项目的平均值?

计算数组和正则表达式中每个项目的出现次数

用Python计算数组中的项目

如何计算数组中的项目 - javascript

如何计算数组中的特定项目

如何在MongoDB中的数组中提取项目的一个实例?

MongoDB计算不同的项目

如何计算数组中数组中的项目?

项目索引数组mongodb

如何在Spring Data MongoDB中使用多个聚合正确地计算数组元素?

MongoDB如何使用Java驱动程序计算数组元素

如何使用mongodb聚合计算数组字段上的百分比?

Mongodb - 如何只返回数组中的项目?

Mongodb 匹配数组中的项目

MongoDB项目数组中的额外字段