gpt4 book ai didi

mongodb - 如何在同一个MongoDB聚合$ group查询中计算多个键?

转载 作者:行者123 更新时间:2023-12-03 16:18:11 26 4
gpt4 key购买 nike

我有一个查询:

db.test.aggregate( {$group : { _id : '$key', frequency: { $sum : 1 } } } )

这将获得测试集中每个键枚举的频率。基本上,我已经分配了 key 。

现在,假设我想获取key1,key2和key3的分布(所以这是三个不同的分布)。

显然,我可以对每个单独的键运行此查询3次,但似乎我们可以通过允许它同时计算所有3个键来优化查询。我一直在使用它并搜索整个网络,但是到目前为止,我只能运行三个单独的聚合查询或使用map/reduce函数。

还有其他想法吗?

最佳答案

您可以在此处使用几种不同的方法:

  • 使用map/reduce:请勿执行此操作。现在,在此用例中,运行聚合框架3次比使用map reduce功能要快得多。
  • 运行聚合3次。这不是最佳选择,但是如果您没有时间限制,那么这是最简单的选择。无论如何,如果您的汇总花费了不到几秒钟的时间,那么在它们成为问题之前,我不会担心优化。
  • 这是我能想到的最佳解决方法。 $group运算符允许您在多个字段上构建_id。例如。 {"_id":{"a":"$key1", "b":"$key2", "c":"$key3"}}。这样做会为不同键的所有现有组合创建一个分组。您可能会以这种方式对键进行分组,然后在客户端中手动汇总结果。

  • 让我详细说明。假设我们有形状的集合。这些形状可以具有颜色,大小和种类(正方形,圆形等)。多键ID的汇总可能如下所示:
    db.shapes.aggregate({$group:{_id:{"f1":"$f1", "f2":"$f2", "f3":"$f3"}, count:{"$sum":1}}})

    然后返回:
    "result" : [
    {
    "_id" : {
    "f1" : "yellow",
    "f2" : "medium",
    "f3" : "triangle"
    },
    "count" : 4086
    },
    {
    "_id" : {
    "f1" : "red",
    "f2" : "small",
    "f3" : "triangle"
    },
    "count" : 4138
    },
    {
    "_id" : {
    "f1" : "red",
    "f2" : "big",
    "f3" : "square"
    },
    "count" : 4113
    },
    {
    "_id" : {
    "f1" : "yellow",
    "f2" : "small",
    "f3" : "triangle"
    },
    "count" : 4145
    },
    {
    "_id" : {
    "f1" : "red",
    "f2" : "small",
    "f3" : "square"
    },
    "count" : 4062
    }

    ... 等等

    然后,您将通过大量减少的条目来在客户端汇总结果。假设每个键的唯一值数量与文档总数相比足够少,那么您可以在很短的时间内完成最后一步。

    关于mongodb - 如何在同一个MongoDB聚合$ group查询中计算多个键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16597812/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com