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

mongodb:将上一个管道结果的数组引用到下一个管道中

方绪
2023-03-14

我正在使用聚合管道。

 const pipeline = [
                    { $match: query } // first pipeline stage
 ]

这将产生以下结果:

{"_id": ObjectId("512bc95fe835e68f199c8686"),"作者":"戴夫","分数": 80,"视图": 100}

{"_id": ObjectId("512bc962e835e68f199c8687"),"作者":"戴夫","分数": 85,"意见": 521}

我想将这个管道结果(在本例中是一个数组)简化为一个对象。我知道,我们可以通过项目来减少成本

第二管道阶段:

{
  $project: {
   results: {
    $reduce: {
        input: <array>, // We have $$ROOT, but I need previous pipeline result
        initialValue: <expression>,
        in: <expression>
    }
   }
}

我们如何将以前的管道结果作为数组引用到此管道阶段?

共有2个答案

谢奇略
2023-03-14

你的意思是$group

db.collection.aggregate([
  { "$match": { ... } },  // your query conditions
  { "$group": { 
    "_id": "$author",
    "score": { "$sum": "$score" },
    "views": { "$sum": "$views" }
  }}
])

这将通过放置在_id中的"作者"字段分组,并使用"累加器"返回其他属性,如$sum

{ "_id" : "dave", "score" : 165, "views" : 621 }

要了解更多信息,我建议查看官方留档的聚合部分,其中显示了许多示例,如果您熟悉SQL数据库,还可以查看聚合映射图的SQL。

艾谦
2023-03-14

你必须使用CURRENT

{
  $project: {
   results: {
    $reduce: {
        input: $$CURRENT, 
        initialValue: <expression>,
        in: <expression>
    }
   }
}
 类似资料:
  • 问题内容: 有任何方法可以从具有参数的另一个管道触发管道作业,我已经尝试过 也尝试过 和 没有运气,它说: 项目类型不支持参数 问题答案: 由于子作业是另一个多分支管道项目,因此我需要指定我要运行的分支 现在可以用了

  • 我目前正在使用一个名为s3-upload-stream的Node.js插件,将非常大的文件传输到Amazon S3。它使用multipart API,并且在很大程度上工作得很好。 是否有一种方法可以使aws-sdk成为我可以将流管道传输到的东西?

  • 根据Andrew Bayer的说法,您不应该向其他人注入声明性管道。将来可能会有人支持它,但可能不会。 我目前正在尝试在管道中启动一个管道,但我想知道我需要做什么才能使它工作。jenkins网页上的文档说明,如果新作业或管道与第一个作业或管道位于同一文件夹中,则可以从直接名称或绝对路径调用它。我已经尝试了所有不同的方法,目前我正在尝试一个文件的绝对路径,我刚刚检查过它一秒钟前存在,但它说它不存在。

  • 我有一个发布管道,它结合了两个构建管道工件来创建完整的版本。完成后,我需要能够下载此任务的结果。 我运行存档任务来压缩结果,但我不知道如何将其保存到可以使用Azure Pipeline代理下载的位置。 有没有可以触发下载的任务,或者我可以将其保存为神器? 谢谢

  • 我想在谷歌数据流上运行一个管道,该管道取决于另一个管道的输出。现在,我正在本地使用DirectRunner依次运行两条管道: 我的问题如下: DataflowRunner是否保证第二个仅在第一个管道完成后启动

  • 我们有一个Kafka主题,有源源不断的数据。为了处理它,我们有一个无状态的Flink管道,它使用该主题并写入另一个主题。 我们是不是漏掉了什么?我们误会什么了吗?有没有更好的解决办法? 谢了!