首页 > 解决方案 > 将客户和订单数据从 SQL 服务器发送到 MongoDB 以及超链接的最佳方式

问题描述

问题陈述: 我需要将 Customer 及其所有相应的订单以以下格式存储在MongoDB. 当前数据位于 2 个不同的表中 -MSSQL数据库中的客户和订单。

MongoDb 中的预期集合:

{
  "_data": [
    {
      "customer": {
        "customerID": "1240014902244000006",
        "firstName": "Jerry",
        "surname": "Galoski",
        "orders": [
          {
            "_data": {
              "orderId": "1240014912244000016",
              "suburb": "Delhi",
              "postcode": "110051",
              "country": "India"
            },
            "_links": [
              {
                "rel": "self",
                "href": "/customer/1240014902244000006/orders",
                "action": "GET"
              },
              {
                "rel": "customer",
                "href": "/customer/1240014902244000006",
                "action": "GET"
              }
            ]
          },
          {
            "_data": {
              "orderId": "1240014912244000024",
              "suburb": "Delhi",
              "postcode": "110051",
              "country": "India"
            },
            "_links": [
              {
                "rel": "customer",
                "href": "/customer/1240014902244000006/orders",
                "action": "GET"
              }
            ]
          }
        ]
      },
      "_links": [
        {
          "rel": "self",
          "href": "/customer/1240014902244000006",
          "action": "GET"
        },
        {
          "rel": "orders",
          "href": "/customer/1240014902244000006/orders",
          "action": "GET"
        }
      ]
    }
  ]
}

为实现这一目标而采取的步骤:

  1. 第一步是整理所有订单数据,我正在使用以下 SQL 查询:

SELECT CustomerId, AllOrderIds =
STUFF(
(
SELECT DISTINCT ', ' + CAST(e2.OrderId AS VARCHAR(MAX))
FROM CustomerOrderRelation e2
WHERE e1.CustomerId = e2.CustomerId
FOR XML PATH('')
), 1,1,''
) FROM CustomerOrderRelation cor;

在此处输入图像描述

  1. 然后我在customers sql查询中使用上面的子查询来获得完整的输出,如图所示。 在此处输入图像描述

  2. 然后在 C# 代码中,我会一一处理客户记录,为每个记录生成超链接。

  3. 我还需要为订单记录生成超链接。

  4. 一旦我在 C# 中生成了超链接,我将调用InsertMany命令 (MongoDB) 来插入数据。因此,我将在 MongoDb 中创建 2 个集合——客户和订单各一个。

  5. 最后,我将使用 MongoDb 的 MapReduce 功能合并 2 个集合以获取数据。

db.customers.mapReduce(mapCustomers, reduce, {"out": {"reduce": "customerId"}});
db.orders.mapReduce(mapOrders, reduce, {"out": {"reduce": "customerId"}});
db.customerAndOrders.find().pretty(); 
  1. 我需要进行合并,因为我没有找到一种聪明的方法来执行以下操作:

需要的建议: 有没有更好的方法来完成上述工作?

标签: c#mongodb

解决方案


推荐阅读