MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

hiển thị tổng của tất cả các tệp đã tìm nạp được gửi trong trình điều khiển mongodb-nodejs

Bạn có thể làm điều này với đường ống tổng hợp. Đây là mã được xuất cho Node:


    [
      {
        '$match': {
          '$or': [
            {
              'orderCreatedForDate': new Date('Fri, 31 Jan 2020 05:00:00 GMT')
            }, {
              'orderCreatedForDate': new Date('Fri, 24 Jan 2020 05:00:00 GMT')
            }
          ]
        }
      }, {
        '$unwind': {
          'path': '$totalOrder', 
          'includeArrayIndex': 'string'
        }
      }, {
        '$group': {
          '_id': {
            'productCode': '$totalOrder.productCode', 
            'date': '$orderCreatedForDate'
          }, 
          'tradeCopies': {
            '$sum': '$totalOrder.tradeCopies'
          }, 
          'subscriptionCopies': {
            '$sum': '$totalOrder.subscriptionCopies'
          }, 
          'freeCopies': {
            '$sum': '$totalOrder.freeCopies'
          }, 
          'institutionalCopies': {
            '$sum': '$totalOrder.institutionalCopies'
          }, 
          'productCode': {
            '$last': '$totalOrder.productCode'
          }, 
          'publicationName': {
            '$last': '$totalOrder.publicationName'
          }, 
          'editionName': {
            '$last': '$totalOrder.editionName'
          }, 
          'publicationDate': {
            '$last': '$orderCreatedForDate'
          }
        }
      }, {
        '$sort': {
          'publicationDate': 1
        }
      }, {
        '$group': {
          '_id': '$_id.productCode', 
          'tradeCopies': {
            '$last': '$tradeCopies'
          }, 
          'previousTradeCopies': {
            '$first': '$tradeCopies'
          }, 
          'subscriptionCopies': {
            '$last': '$subscriptionCopies'
          }, 
          'previousSubscriptionCopies': {
            '$first': '$subscriptionCopies'
          }, 
          'institutionalCopies': {
            '$last': '$institutionalCopies'
          }, 
          'previousInstitutionalCopies': {
            '$first': '$institutionalCopies'
          }, 
          'freeCopies': {
            '$last': '$freeCopies'
          }, 
          'previousFreeCopies': {
            '$first': '$freeCopies'
          }, 
          'productCode': {
            '$last': '$productCode'
          }, 
          'publicationName': {
            '$last': '$publicationName'
          }, 
          'editionName': {
            '$last': '$editionName'
          }, 
          'publicationDate': {
            '$last': '$publicationDate'
          }
        }
      }, {
        '$project': {
          'productCode': 1, 
          'publicationName': 1, 
          'editionName': 1, 
          'publicationDate': 1, 
          'tradeCopies': 1, 
          'subscriptionCopies': 1, 
          'institutionalCopies': 1, 
          'freeCopies': 1, 
          'previousWeekCopies': [
            {
              'tradeCopies': '$previousTradeCopies', 
              'subscriptionCopies': '$previousSubscriptionCopies', 
              'freeCopies': '$previousFreeCopies', 
              'institutionalCopies': '$previousInstitutionalCopies'
            }
          ]
        }
      }
    ]

Hãy xem những gì đang xảy ra trong từng giai đoạn:


    [{$match: {
      $or: [ {orderCreatedForDate: ISODate('2020-01-31T05:00:00.000+00:00')},
      {orderCreatedForDate: ISODate('2020-01-24T05:00:00.000+00:00')}]
    }}, 

Chúng tôi bắt đầu bằng cách khớp cho các đơn đặt hàng có ngày mà chúng tôi quan tâm.

    {$unwind: {
      path: "$totalOrder",
      includeArrayIndex: 'string'
    }}, 

Sau đó, chúng tôi giải phóng mảng totalOrder. Điều này tạo ra một tài liệu cho mọi đơn đặt hàng.


    {$group: {
      _id: {productCode: "$totalOrder.productCode", date: "$orderCreatedForDate"},
      tradeCopies: {
        $sum: "$totalOrder.tradeCopies"
      },
      subscriptionCopies: {
        $sum: "$totalOrder.subscriptionCopies"
      },
      freeCopies: {
        $sum: "$totalOrder.freeCopies"
      },
      institutionalCopies: {
        $sum: "$totalOrder.institutionalCopies"
      },
      productCode: { $last: "$totalOrder.productCode"},
      publicationName: { $last: "$totalOrder.publicationName"},
      editionName: { $last: "$totalOrder.editionName"},
      publicationDate: { $last: "$orderCreatedForDate"}
    }}, 

Sau đó, chúng tôi nhóm các tài liệu theo mã sản phẩm và ngày. Điều này cho phép chúng tôi tạo ra số tiền chúng tôi cần.


    {$sort: {
      publicationDate: 1
    }}, 

Sau đó, chúng tôi sắp xếp các tài liệu của mình để chúng tôi biết rằng các tài liệu cũ hơn là tài liệu đầu tiên.


    {$group: {
      _id: "$_id.productCode",
      tradeCopies: {
        $last: "$tradeCopies"
      },
      previousTradeCopies: {
        $first: "$tradeCopies"
      },
      subscriptionCopies: {
        $last: "$subscriptionCopies"
      },
      previousSubscriptionCopies: {
        $first: "$subscriptionCopies"
      },
      institutionalCopies: {
        $last: "$institutionalCopies"
      },
      previousInstitutionalCopies: {
        $first: "$institutionalCopies"
      },
      freeCopies: {
        $last: "$freeCopies"
      },
      previousFreeCopies: {
        $first: "$freeCopies"
      },
      productCode: { $last: "$productCode"},
      publicationName: { $last: "$publicationName"},
      editionName: { $last: "$editionName"},
      publicationDate: { $last: "$publicationDate"}
    }}, 

Tiếp theo, chúng tôi nhóm các tài liệu của chúng tôi lại với nhau theo mã sản phẩm để chúng tôi có thể tạo một tài liệu duy nhất cho mỗi mã sản phẩm.


    {$project: {
      productCode: 1,
      publicationName: 1,
      editionName: 1,
      publicationDate: 1,
      tradeCopies: 1,
      subscriptionCopies: 1,
      institutionalCopies: 1,
      freeCopies: 1,
      previousWeekCopies: [{
        tradeCopies: "$previousTradeCopies",
        subscriptionCopies: "$previousSubscriptionCopies",
        freeCopies: "$previousFreeCopies",
        institutionalCopies: "$previousInstitutionalCopies"
      }
        ]
    }}]

Cuối cùng, chúng tôi chiếu các trường chúng tôi cần theo định dạng chúng tôi cần.

Dưới đây là một số ảnh chụp màn hình để bạn có thể xem trực quan những gì đang xảy ra trong từng giai đoạn.

Để biết thêm về cách sử dụng đường dẫn tổng hợp với Node.js, hãy xem https://www.mongodb.com/blog/post/quick-start-nodejs--mongodb--how-to-analyze-data- using-the-integration-framework . Tôi cũng thực sự giới thiệu khóa học miễn phí của Đại học MongoDB về đường dẫn tổng hợp: https://university.mongodb. com / Course / M121 / about




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. 10 mẹo để cải thiện bảo mật MongoDB của bạn

  2. mongoose Ngày so sánh không có thời gian và Nhóm theo nhiều thuộc tính?

  3. Redis và MongoDB:Những điều bạn cần biết

  4. mongodb:chèn nếu không tồn tại

  5. Truy vấn và Chèn bằng một lệnh duy nhất