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

Mongodb连接多组值

孟茂
2023-03-14

你好,我开始学习mongoDB查询

我对聚合有一些理解上的问题

例如,我有以下文档:

           [
            {
              totalTaxInclusive: 15,
              totalTaxExclusive: 12.5,
              payments:[{
                 method: "CB",
                 amount: 10
              },
              {
                 method: "CASH",
                 amount: 5
              }
            ],
           },
           {
              totalTaxInclusive: 40,
              totalTaxExclusive: 33.33,
              payments:[{
                 method: "CB",
                 amount: 40
              }
            ],
           },
          ]

等等。

我如何提出请求,我将拥有谁:

        $group: {
          _id: "$payments.method",
          amount: { $sum: "$payments.amount"},
        }

和a

$group: {
       _id: null,
       totalCount: { $sum: 1 },
       totalTaxInclusive: { $sum: "$totalTaxInclusive"},
       totalTaxExclusive: { $sum:"$totalTaxExclusive" },
     }

产生如下结果:

{
totalCount: 2,
totalTaxInclusive: 55,
totalTaxExclusive: 45.83,
payments: [{
     method: "CASH",
     amount: 5,
    },
    {
     method: "CB",
     amount: 50,
    }
  ]
}

非常感谢你的帮助。

共有2个答案

于捷
2023-03-14
  • 第一阶段对所有文档进行分组并将其数据存储在相关数组中。还计算此阶段中的所有文档。
  • 第二阶段,对总额中的所有项目进行求和。独占总额包含数组
  • 展开支付的第三阶段和第四阶段,因为它是数组的数组
  • 第四阶段按payment_method分组,并按每个payment_method
  • 获得总和
  • 以请求格式输出结果的第五阶段
db.collection.aggregate([
  {
    "$group": {
      "_id": null,
      "totalTaxInclusive": {
        "$addToSet": "$totalTaxInclusive"
      },
      "totalTaxExclusive": {
        "$addToSet": "$totalTaxExclusive"
      },
      "payments": {
        "$addToSet": "$payments"
      },
      "count": {
        "$sum": 1
      }
    }
  },
  {
    "$set": {
      "totalTaxExclusive": {
        "$sum": "$totalTaxExclusive"
      },
      "totalTaxInclusive": {
        "$sum": "$totalTaxInclusive"
      }
    }
  },
  {
    "$unwind": "$payments"
  },
  {
    "$unwind": "$payments"
  },
  {
    "$group": {
      "_id": "$payments.method",
      "amount": {
        "$sum": "$payments.amount"
      },
      "totalTaxInclusive": {
        "$first": "$totalTaxInclusive"
      },
      "totalTaxExclusive": {
        "$first": "$totalTaxExclusive"
      },
      "count": {
        "$first": "$count"
      }
    }
  },
  {
    "$group": {
      "_id": null,
      "payments": {
        "$addToSet": {
          "method": "$_id",
          "amount": "$amount"
        }
      },
      "totalTaxInclusive": {
        "$first": "$totalTaxInclusive"
      },
      "totalTaxExclusive": {
        "$first": "$totalTaxExclusive"
      },
      "count": {
        "$first": "$count"
      }
    }
  }
])

工作示例

鱼安然
2023-03-14
  • $groupby null并获取所需字段的总和,构造支付数组
  • $concatArray连接数组
  • $减少以将支付的嵌套数组包含到数组
  • $展开解构支付数组
  • $groupbymethod并获取金额的总和并获取所需字段的第一个值
  • $groupby null并构造支付数组并获取计数字段第一个值
db.collection.aggregate([
  {
    $group: {
      _id: null,
      totalTaxInclusive: { $sum: "$totalTaxInclusive" },
      totalTaxExclusive: { $sum: "$totalTaxExclusive" },
      totalCount: { $sum: 1 },
      payments: { $push: "$payments" }
    }
  },
  {
    $addFields: {
      payments: {
        $reduce: {
          input: "$payments",
          initialValue: [],
          in: { $concatArrays: ["$$this", "$$value"] }
        }
      }
    }
  },
  { $unwind: "$payments" },
  {
    $group: {
      _id: "$payments.method",
      amount: { $sum: "$payments.amount" },
      totalTaxInclusive: { $first: "$totalTaxInclusive" },
      totalTaxExclusive: { $first: "$totalTaxExclusive" },
      totalCount: { $first: "$totalCount" }
    }
  },
  {
    $group: {
      _id: null,
      totalTaxInclusive: { $first: "$totalTaxInclusive" },
      totalTaxExclusive: { $first: "$totalTaxExclusive" },
      totalCount: { $first: "$totalCount" },
      payments: {
        $push: {
          method: "$_id",
          amount: "$amount"
        }
      }
    }
  }
])

游戏场

 类似资料:
  • 我面临mongo DB连接问题。 我成功地将tMongo组件导入我的Talend Open Studio 5.1.1,并复制了mongo 1.3。jar文件到lib/java文件夹,我的Mongo DB作业正在成功运行,但问题是,即使我为mongoDB提供了一些假服务器路径(IP)和假端口,我的作业运行时没有出现错误,它给了我一行没有数据的数据。正确的IP和端口也是如此。 我如何解决它。

  • MongoDB是一种文档导向数据库管理系统,由C++撰写而成。 本章节我们将为大家介绍如何使用 Node.js 来连接 MongoDB,并对数据库进行操作。 如果你还没有 MongoDB 的基本知识,可以参考我们的教程:MongoDB 教程。 安装驱动 本教程使用了淘宝定制的 cnpm 命令进行安装: $ cnpm install mongodb 接下来我们来实现增删改查功能。 创建数据库 要

  • 下面是/etc/kafka/connect-MongoDB-source.properties中的MongoDB配置 但是低于误差 以独立模式运行连接器。 我在debezium-debezium-连接器-mongob-1.0.0/debezium-connector-mongodb-1.0.0.Final.jar 类路径的设置如下 使用插件路径,我看到它能够注册和加载所有必需的插件。 但最后还是同

  • 我正在尝试使用MongoDB指南针使用Atlas

  • 我试图在android中连接到我的MongoDB数据库,但我遇到了问题。我得到: I/Cluster:使用设置创建群集{hosts=[mlab_string],mode=single,requiredclustertype=unknown,serverselectiontimeout='30000 ms',maxwaitqueuesize=500} 然后我得到: I/cluster:Primary

  • 在操作 MongoDB 数据库之前我们需要先连接数据库,您可以使用 MongoDB shell 来连接 MongoDB,也可以使用 PHP、Java 等编程语言来连接 MongoDB,本节我们主要介绍一下使用 MongoDB shell 来连接 MongoDB。 在连接 MongoDB 之前,我们需要先启动 MongoDB,启动 MongoDB 的方式非常简单,您只需要在 MongoDB 安装目录