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

由另一字段分组的聚合查询中两个int数组的和

孟鸿德
2023-03-14

示例数据:

{d:[1,2], date:"17-01-2020"} {d:[3,4], date:"17-01-2020"} {d:[5,6], date:"18-01-2020"}

我想要的查询结果:

{d:[4, 6], date:"17-01-2020"} {d:[5,6], date:"18-01-2020"}

共有1个答案

蔺沛
2023-03-14

如果修复大小为两个值,则可以使用以下值:

db.collection.aggregate([
   { $group: { _id: null, data: { $push: "$d" } } },
   {
      $set: {
         d: [
            {$sum:{ $map: { input: "$data", in: { $first: "$$this" } } }},
            {$sum:{ $map: { input: "$data", in: { $last: "$$this" } } }}
         ]
      }
   },
   {$unset: "data"}
])

对于任何长度,请使用以下内容:

db.collection.aggregate([
   { $group: { _id: null, data: { $push: "$d" } } },
   {
      $set: {
         d: {
            $map: {
               input: { $range: [0, { $size: { $first: "$data" } }] },
               as: "idx",
               in: { $sum: { $map: { input: "$data", in: { $arrayElemAt: ["$$this", "$$idx"] } } } }
            }
         }
      }
   }
])

第一个数组决定所有其他数组的长度。

db.collection.aggregate([
  { $unwind: { path: "$d", includeArrayIndex: "idx" } },
  { $group: { _id: "$idx", d: { $sum: "$d" } } },
  { $sort: { _id: 1 } },
  { $group: { _id: null, d: { $push: "$d" } } }
])
db.collection.aggregate([
  { $unwind: { path: "$d", includeArrayIndex: "idx" } },
  { $group: { _id: "$idx", d: { $sum: "$d" }, date: { $first: "$date" } } },
  { $sort: { _id: 1 } },
  { $group: { _id: "$date", d: { $push: "$d" } } },
  { $project: { d: 1, date: "$_id" } }
])
 类似资料:
  • 我正处于复杂的聚合查询(具有查找和许多组/展开阶段)的中间,并且遇到来自不同字段的两个不同数组的合并问题。 至于现在,在其中一个阶段之后(在我的大查询的中间或查找之后),我有以下输出: 我想: 因此,每个值,我想根据它的索引添加到内的每个对象,比如第一个内的应该有第一个来自 具有数组索引的架构): 问题是: 我无法在聚合之后或之前执行此操作,因为: > 我没有必要的数据,因为它是从不同集合中查找的

  • 我试图查询与特定用户至少有一种共同颜色的所有用户,我已经能够做到这一点,但是我无法弄清楚如何我的结果,以便我可以得到一个用户以及他们共有的颜色。 我的示例用户文档的一部分如下: 这是我的查询,用于获取与另一个具有红色、橙色和绿色的用户相同的颜色: 如何使用共同的颜色聚合用户?

  • 在各种聚合管道阶段之后,我的第一个查询返回以下结果: 在各种聚合管道阶段之后,我的第二个查询返回以下结果: 这两个查询都在同一个集合上执行,但是根据管道阶段对数据进行不同的分组和转换。 我的两个查询都使用不同的条件,具有不同的管道阶段,包括和

  • 问题内容: 我需要的是对表的查询,该查询将返回列A和B的不同组合,以及表中每种组合发生多少次的计数。所有这些都将按A列进行排序。 如果表是: 结果将是: 任何帮助将是巨大的。 问题答案: GROUP BY是您的朋友在这里: SQLFiddle:http ://sqlfiddle.com/#!9/062b0e/5

  • 问题内容: 给定一个字节数组,我如何在其中找到(较小)字节数组的位置? 使用,该文档看起来很有希望,但是如果我正确的话,那只会让我在要搜索的数组中找到一个单独的字节。 (我认为这并不重要,但以防万一:有时搜索字节数组将是常规的ASCII字符,有时是控制字符或扩展的ASCII字符。因此使用String操作并不总是合适的) 大数组可能在10到10000个字节之间,而小数组大约在10个字节。在某些情况下

  • 我有一个非常特别的问题,关于查询嵌套到数组字段的布尔字段和字符串字段。索引映射如下所示: 文档索引还有许多其他字段,这些字段没有嵌套到数组字段中,但必须包含在查询字段中。我尝试了一种使用过滤器和布尔查询的方法,如下所示: 这个查询的问题是,它返回的文档在我看来不必返回。在这种情况下,文件如下所示: 您可以注意到,array_field_1的第三项包含boolean_field_2:false和正在