当集合按日期排序时,我try 根据文档之前的先前文档的值向每个文档添加一个新字段.上下文是,我正在try 创建条目的折线图,因此我需要每个条目的当前总和.

示例如下:

Input:
Collection:

Document-1: { type: 'typeX', date: '01-01-2000', value: 10 }
Document-2: { type: 'typeY', date: '01-03-2000', value: -5 }
Document-3: { type: 'typeX', date: '01-02-2000', value: 3 }
Document-4: { type: 'typeX', date: '01-03-2000', value: -1 }
Document-5: { type: 'typeY', date: '01-01-2000', value: 10 }

Output:
{ type: 'typeX', date: '01-01-2000', value: 10, sum: 10}
{ type: 'typeY', date: '01-01-2000', value: 10, sum: 10}
{ type: 'typeX', date: '01-02-2000', value: 3, sum: 13}
{ type: 'typeY', date: '01-03-2000', value: -5, sum: 5}
{ type: 'typeX', date: '01-03-2000', value: -1, sum: 12}

在Mongoose用aggregate或其他任何方式都可以吗?

推荐答案

是的,您可以使用$setWindowFields,因为它:

对集合中指定范围的文档(称为窗口)执行操作,并根据选定的 窗口操作员.例如,您可以使用 $setWindowFields阶段输出集合中两个单据之间的销售差额...累计销售总额...

使用此聚合,它也适用于Mongoose Model.aggregate():

db.collection.aggregate([
  {
    $setWindowFields: {
      partitionBy: "$type",
      sortBy: {
        date: 1
      },
      output: {
        sum: {
          $sum: "$value",
          window: {
            documents: [
              "unbounded",
              "current"
            ]
          }
        }
      }
    }
  },
  {
    $sort: {
      date: 1
    }
  }
]);

有关工作示例,请参见HERE.

Javascript相关问答推荐

使用JavaScript更改json值顺序

在JavaScript中打开和关闭弹出窗口

Vue Quill css仅应用于我的第一个Quill Editor组件+如何自定义工具栏

强制执行useStatego struct 化变量[foo,setFoo]的命名约定?

浮动Div的淡出模糊效果

Spring boot JSON解析错误:意外字符错误

将字符串UTC Date转换为ngx—counting leftTime配置值的数字

当运行d3示例代码时,没有显示任何内容

空的结果抓取网站与Fetch和Cheerio

实现JS代码更改CSS元素

ChartJs未呈现

将核心模块导入另一个组件模块时存在多个主题

本地库中的chartjs-4.4.2和chartjs-plugin-注解

在使用位板时,如何在Java脚本中判断Connect 4板中中柱的对称性?

以编程方式聚焦的链接将被聚焦,但样式不适用

在SHINY R中的嵌套模块中,不能使用Java代码

第一项杀死下一项,直到数组长度在javascript中等于1

如何使用Astro优化大图像?

P5.js中的分形树

JavaScript&;Reaction-如何避免在不使用字典/对象的情况下出现地狱?