假设我在一个名为"USERS"的集合中有以下数据:

[
  {
    "_id": 1,
    "name": "Bob",
    "age": 22
  },
  {
    "_id": 2,
    "name": "Anna",
    "age": 30
  },
  {
    "_id": 3,
    "name": "John",
    "age": 30
  },
  {
    "_id": 4,
    "name": "Maria",
    "age": 22
  }
]

我想编写一个按年龄对用户进行"分组"的查询,因此它将返回一个数组array.大概是这样的:

[
  [
    {
      "_id": 1,
      "name": "Bob",
      "class": 2
    },
    {
      "_id": 2,
      "name": "Anna",
      "class": 2
    }
  ],
  [
    {
      "_id": 3,
      "name": "John",
      "class": 5
    },
    {
      "_id": 4,
      "name": "Maria",
      "class": 5
    }
  ]
]

我曾try 使用聚合来编写查询,但名称不是累加器对象,因此它永远不会起作用.

数据库用户集合([{"$group":{_id:"$age",_name:"$name"}}])

我还阅读了一些堆栈溢出问题,但我想不出如何解决我的问题.

推荐答案

也许是这样的:

db.collection.aggregate([
 {
"$group": {
  "_id": "$age",
  "field": {
    "$push": "$$ROOT"
  }
 }
},
{
"$group": {
  "_id": "test",
  "theFinalArray": {
    "$push": "$field"
    }
   }
 }
])

解释:

  1. 将所有单据按$AGE分组,推送数组字段中的单据
  2. 将所有文档分组到另一个数组中,其中包含所有字段数组

Playground

Json相关问答推荐

替换字符串中特殊字符的Jolt变换

如何循环访问多个子数组并在单个JSON中检索数据点

将PostgreSQL转换为JSON对象

将JSON数组组织到菜单中

Delphi 11.3无法从变体创建/添加JSON

jq :遍历 json 并在键存在时检索集合

如何将 JSON 文本作为参数传递给 powershell?

Jolt - 在同一级别添加时组合值的问题

UTF-8 字符编码之战 json_encode()

如何对使用转换器的 Grails 服务进行单元测试?

解析包含换行符的 JSON

如何将 LinkedHashMap 转换为自定义 java 对象?

将json字符反序列化为枚举

将 JSON 对象推送到 localStorage 中的数组

在 Qt 4.7 中解析 JSON 的最简单方法

如何将 Swift 对象转换为字典

将 CoffeeScript 项目转换为 JavaScript(不缩小)?

有没有办法在 angular.json 中扩展配置?

仅使用字符串和值解析 JSON 对象

从 JSON 中 Select 不同的值