【问题标题】:MongoDB group documents by field name without specifying value [duplicate]MongoDB按字段名称对文档进行分组而不指定值[重复]
【发布时间】:2018-03-23 01:34:28
【问题描述】:

编辑:在第一条评论中找到解决方案,您也可以查看that question,我们实现了同样的目标。

假设我有一个包含这些文档的集合

[
  { name: 'John', fruit: 'apples' },
  { name: 'Zac', fruit: 'bananas' },
  { name: 'Sara', fruit: 'oranges' },
  { name: 'John', fruit: 'oranges' },
  { name: 'Sara', fruit: 'pear' }
]

有没有什么方法可以使用 mongoDB 按字段名称对这些文档进行分组而不指定它们的值?我希望所有文档都根据它们的名称进行分组,而不是指定“John”或“Sara”。

我想要实现的是按名称对它们进行分组,因此伪代码类似于:

db.collection.groupByField('name')

而期望的结果是:

[
  [
    { name: 'John', fruit: 'apples' },
    { name: 'John', fruit: 'oranges' }
  ],
  [
    { name: 'Zac', fruit: 'bananas' }
  ],
  [
    { name: 'Sara', fruit: 'oranges' },
    { name: 'Sara', fruit: 'pear' }
  ]
];

【问题讨论】:

  • 试试db.collection.aggregate([{$group:{_id:"$name", data:{$push:"$$ROOT"}}}])
  • 是的,我们都想要同样的东西。不过,我的问题是针对不熟悉聚合的经验不足的程序员。谢谢你们的帮助,伙计们。

标签: mongodb mongoose nosql aggregation


【解决方案1】:

Veeram 在评论中回答了我的问题,解决方案是:

db.collection.aggregate([{$group:{_id:"$name", data:{$push:"$$ROOT"}}}])

【讨论】:

  • 你没有在问题中询问PUSH,所以下面的查询就足够了:{_id:"$name"}
  • 我没有明确要求push,但我通过所需的结果示例隐含地这样做了,我需要一个子数组数组,每个子数组包含一组文档。
猜你喜欢
  • 2023-01-12
  • 2020-09-08
  • 1970-01-01
  • 1970-01-01
  • 2020-07-24
  • 1970-01-01
  • 2018-08-14
  • 1970-01-01
  • 2017-10-24
相关资源
最近更新 更多