计算嵌套 mongodb 文档中的出现次数并保留组

2024-01-06

我有这些文件:

[
  {
      "question": 1,
      "answer": "Foo"
  },
  {
      "question": 1,
      "answer": "Foo"
  },
  {
      "question": 1,
      "answer": "Bar"
  },
  {
      "question": 2,
      "answer": "Foo"
  },
  {
      "question": 2,
      "answer": "Foobar"
  }
]

在我的后端(php)中,我需要重新分配答案,例如:

  • 问题一:

    • “福”:2/3
    • “酒吧”:1/3
  • 问题2:

    • “福”:1/2
    • “Foobar”:1/2

现在我只想运行 mongo 查询以获得此结果:

[
  {
      "question": 1,
      "answers": {
          "Foo": 2,
          "Bar": 1
      }
  },
  {
      "question": 2,
      "answers": {
          "Foo": 1,
          "Foobar": 1
      }
  }
 ]

这是我想出的:

db.getCollection('testAggregate').aggregate([{
    $group: {
        '_id': '$question',
        'answers': {'$push': '$answer'},
    }
}
]);

它返回:

{
    "_id" : 2.0,
    "answers" : [ 
        "Foo", 
        "Foobar"
    ]
},{
    "_id" : 1.0,
    "answers" : [ 
        "Foo", 
        "Foo", 
        "Bar"
    ]
}

现在我需要对答案字段进行 $group 操作以计算发生次数,但我需要按问题保留组,但我不知道该怎么做。有人可以帮我吗?


您可以使用下面的聚合。

按问题和答案进行分组以获得组合的计数,然后按问题进行分组以获得答案及其计数。

db.getCollection('testAggregate').aggregate([
  {"$group":{
    "_id":{"question":"$question","answer":"$answer"},
    "count":{"$sum":1}
  }},
  {"$group":{
    "_id":"$_id.question",
    "answers":{"$push":{"answer":"$_id.answer","count":"$count"}}
  }}
]);

您可以使用下面的代码来获取 3.4 中您想要的格式。

Change $group键入 k 和 v,然后$addFields https://docs.mongodb.com/manual/reference/operator/aggregation/addFields/ with $arrayToObject https://docs.mongodb.com/manual/reference/operator/aggregation/arrayToObject/将数组转换为命名键值对。

db.getCollection('testAggregate').aggregate([
  {"$group":{
    "_id":{"question":"$question","answer":"$answer"},
    "count":{"$sum":1}
  }},
  {"$group":{
    "_id":"$_id.question",
    "answers":{"$push":{"k":"$_id.answer","v":"$count"}}
  }},
 {"$addFields":{"answers":{"$arrayToObject":"$answers"}}}
]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

计算嵌套 mongodb 文档中的出现次数并保留组 的相关文章

随机推荐

  • NuGet - 找不到“添加库包引用...”

    我正在使用安装了 MVC3 的 Visual Studio 2010 SP1 由于我正在学习 NuGet 基础知识 因此我正在阅读本教程http maleevdimka com post NuGet Part 1 aspx http mal
  • Nativecript Fontawesome 5 iPhone 无法工作

    我正在尝试让 Font Awesome 5 在 Android 上运行 但它不起作用 使用https github com NathanWalker nativescript ngx fonticon https github com Na
  • ListView ArrayAdapter,将子项隐藏在 Row 中?

    我觉得有点愚蠢 因为我找不到这个问题的答案 这让我觉得我实际上是在问wrong问题 然而 这里 我有一个列表视图和一个在 xml 中定义的 listviewitem 有几个字段 没有什么特别的 全部设置为可见 然后 我使用自定义 Array
  • 使用 GDB 调试模板

    My gdb是 GNU gdb Red Hat Linux 6 3 0 0 1 162 el4rh 我无法调试模板 如何使用此调试器调试模板 如果您的问题只是在代码中放置断点 这是一个小片段 例如 main cpp include
  • 32/64 位的 MSBuild 和 $(ProgramFiles) 问题

    我编写了一个自定义 MSBuild 任务 它调用SubWCRev exe 一个可执行文件 通常 驻留在C Program Files TortoiseSVN bin 无论是 32 位还是 64 位 因为 TortoiseSVN 提供这两个版
  • 隐藏地图注释而不删除它们

    使用 MKMapView 我加载了一堆注释 并且我希望能够过滤使用分段控件显示的注释 我使用带有类型变量的自定义注释 这样我就可以将它们彼此区分开来 但我无法找到一种方法来随意隐藏和显示注释视图的子集 当然可以 试试这个 Objective
  • 在ajax请求中设置$_SESSION

    我有这个 Jquery Ajax 函数可以在网页中登录 url ajax type POST url url data success function jsonResponse var json JSON parse jsonRespon
  • AWS IoT - 通过.Net、REST 和证书访问影子

    为了学习 AWS IoT 我创建了一些 事物 一个策略 我什至能够使用 IoT CLI 来列出事物 or 列表策略 我什至可以通过 CLI 更新影子更新事物通过 CLI 命令 但是一旦我尝试通过 REST GET POST 请求 通过 Ne
  • 如何使用 Homebrew 在 osx macOS Mojave 上安装 Java 8?

    目前 某些应用程序仍然需要 Java 8 例如 Android SDK Android Studio Jenkins 离子 With brew install java the latest版本已安装 但是如何安装Java 8呢 旧的 Or
  • pre 内的代码在 IE8 上排成一行

    我试图从 a 中获取价值textarea并将其放入一个pre tag 它在 chrome 和 mozilla 上工作正常 但在 IE8 上 整个内容保留在一行中pre tag jsbin链接 http jsbin com uwunug 4
  • 如何在dojo中加载一个不是模块的JS文件?

    首先我要说的是 我是一个 javascript 和 dojo 菜鸟 不过 我一直在使用 D O H 框架为我的 js 代码编写一些单元测试 我注意到的一件事是该框架似乎没有办法模拟 XHR 请求 所以我决定使用 sinon 来进行嘲笑 这是
  • Swift 协议专用通用协议

    是否有可能有一个专门针对通用协议的协议 我想要这样的东西 protocol Protocol RawRepresentable typealias RawValue Int 这确实可以编译 但是当我尝试访问init or rawValue从
  • 在批处理脚本中实施“which”命令

    我试图制作一个像这样的脚本which 所以我想检查这个命令是内部命令还是外部命令或两者兼而有之 我尝试执行程序 但是当程序 例如 exe 不正确时 我的程序退出时出现错误 所以我尝试调用help对于这个程序 但现在如果我尝试检查例如echo
  • 如何使用 Charles Proxy 设置 Android Lollipop 模拟器?

    我一直在遵循其他问题的指示 例如如何在 Windows 上使用 Charles Web Proxy 和最新的 Android 模拟器配置 SSL 证书 https stackoverflow com questions 3976728 ho
  • JLabel 中有两个图标?

    我在 JLabel 中有一个图标 如下所示 是否可以在颜色图标和文本之间添加另一个图标 例如代表国家的国旗 例如 我想在红色图标和US 谢谢 是的 在容器标签中使用嵌套的 JLabel 和 BoxLayout JLabel containe
  • 唯一性约束(逗号、分隔、属性)如何与 CoreData 中的 Swift 配合使用?

    我刚刚注意到 CoreData 中的每个唯一性约束可以有多个属性 逗号 分隔 属性 但我实际上不知道在一个约束中拥有多个属性会做什么 这是否意味着如果其中任何一个是唯一的 那么约束就不会被打破 Apple 文档并不是特别有帮助 约束 按照配
  • 子类化 ctypes - Python

    这是我在互联网上找到的一些代码 我不确定它是如何使用的 我简单填写了members使用枚举键 值并且它可以工作 但我很好奇这个元类是关于什么的 我假设它与 ctypes 有关 但我找不到关于子类化 ctypes 的太多信息 我知道 Enum
  • 将当前 URL 的结束字符替换为小书签

    有没有办法通过 javascript bookmarklet 将 currentURL 中最后一个反斜杠之后的所有字符替换为另一个字符串 我正在对 Sharepoint 网站进行大量审核工作 并且必须通过在 URL 末尾输入字符串来手动查看
  • 在 C++ 中使用 MinGW 嵌入 python3.6 链接失败

    尝试在Win10 64位系统上将python3 6嵌入到C 中 Python 的安装方式是python 3 6 1 amd64 exe CMakeList txt 显示如下 cmake minimum required VERSION 3
  • 计算嵌套 mongodb 文档中的出现次数并保留组

    我有这些文件 question 1 answer Foo question 1 answer Foo question 1 answer Bar question 2 answer Foo question 2 answer Foobar