当前位置: 首页 > 知识库问答 >
问题:

如何用数组字段将文档流聚合成单个文档?(mongodb)

柳轶
2023-03-14

我有这个数据集:

[
  { 
    userId: 1,
    nickname: 'a'
  },
  { 
    userId: 2,
    nickname: 'b'
  },
  { 
    userId: 3,
    nickname: 'c'
  },
  ...
]

我想用聚合来实现这种形式:

{
  newField: 123456,
  users: [
    { 
      userId: 1,
      nickname: 'a'
    },
    { 
      userId: 2,
      nickname: 'b'
    },
    { 
      userId: 3,
      nickname: 'c'
    },
    ...
  ],
}

其中文档流组合成单个文档内的单个数组字段,我想在其中添加一些额外的字段。初始数据集在聚合管道中的第n个阶段后检索。

鉴于所有这些:
下一阶段应该是什么?
我需要$group吗?
我的下一阶段应该是什么样子?

db.users.aggregate([
  ...,
  { $whatStage: <what do I do inside of it...> }
])

共有1个答案

沈运恒
2023-03-14

如果我理解正确,您可以尝试以下查询:

按< code>null分组确保所有值都被分组。和< code > $ push < code > $ $ ROOT 对象(即文档)。

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

这里的例子

此外,要添加新字段,您可以使用$First进入组(示例)或使用$set$addFields$Project的新阶段,如下例所示

 类似资料:
  • 我有一个聚合管道,几乎可以实现我想要的功能。我使用了匹配/解开/项目/排序来获得99%的方式。它正在返回多个文档: 注意:我添加了数组括号和逗号以使其更具可读性,但您也可以将其理解为: 我需要一个文档中值数组中所有7个文档的ID字段的内容: 一旦我有了结果,就可以用JS对其进行排序,但如果可能的话,我宁愿在管道中进行排序,这样我的JS就可以保持100%的通用性,并且只返回纯管道数据。

  • 我想从引用的文档中获取字段值。Mongodb版本是3.4。 假设我有两个收藏foo和bar。Foo提到bar: 相应的条形码文档看起来像这样: 我尝试了以下聚合函数来归档此结果: 聚合功能: 但我的结果是这样的: 我试着用谷歌搜索它,我查看了mongodb文档,但没有找到解决方案。 是我错过了什么还是这不可能? 谢谢

  • ES如何在内部实现度量聚合? 假设索引中的文档具有以下结构: 对于以下对类别进行术语聚合并计算总和(度量)的查询,“度量”字段值 从文档中提取(即\u源)并求和或 查询:

  • 我对mongoDB的聚合函数感到非常困惑。我只想在我的收藏中找到最新的文档。假设每个记录都有一个“创建”的字段 产生正确的结果,但我希望结果中包含整个文档?我将如何做到这一点? 这是文档的结构:

  • 设想一个集合,该集合在聚合的$match操作符上返回具有此结构的文档数组 所以基本上每个返回的文档都共享一个片段(这就是我将如何对它们进行分组),但是每个文档都有一个子文档数组,每个子文档都有不同的_id。 因此,当我使用{slug:“a”}执行$match聚合时,它返回一个数组

  • 我需要把一个文件分成几个小文件。例如,如果文档有7页,我需要生成7个PDF。 在iTextSharp中,我使用了以下代码,运行得非常好。然而,在iText 7中,不可能以同样的方式进行。 第一个问题 我发现有一个,它可以将我的pdf文件拆分成小的pdf文件。然而,即使是我的测试pdf也有7页,甚至返回数字7,被拆分的文档的数量只是一个。 在这个链接文档中,以某种方式展示了如何拆分文档。然而,我不知