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

Cách nhận kết quả này với tổng hợp trong mongoDB

Phiên bản Mongo 3.4

Bản đồ $ để nhân giá và giá trị của mặt hàng và $ giảm để tính tổng giá và giá trị của mặt hàng và $ giảm để tính tổng giá vốn của mặt hàng. $ trừ các giá trị từ lần giảm trước đó để nhận được số tiền cuối cùng.

aggregate([{
    $project: {
        _id: 1,
        amount: {
            $subtract: [{
                $reduce: {
                    input: {
                        $map: {
                            input: "$items",
                            as: "item",
                            in: {
                                $multiply: ["$$item.value", "$$item.price"]
                            }
                        }
                    },
                    initialValue: 0,
                    in: {
                        $add: ["$$value", "$$this"]
                    }
                }
            }, {
                $reduce: {
                    input: "$costs.price",
                    initialValue: 0,
                    in: {
                        $add: ["$$value", "$$this"]
                    }
                }
            }]
        }

    }
}])

Phiên bản Mongo 3.x

Dự án $ đầu tiên để nhân giá trị và giá của mặt hàng. Việc nhóm tiếp theo để tính tổng cho cả trường mục và trường chi phí, điều này sẽ dẫn đến một giá trị mảng cho từng mục và trường chi phí và dự án cuối cùng chỉ xem xét giá trị mảng từ cả hai mảng với $ arrayElemAt để trừ các giá trị cho nhau.

aggregate(
    [{
        $project: {
            vpItems: {
                $map: {
                    input: "$items",
                    as: "item",
                    in: {
                        $multiply: ["$$item.value", "$$item.price"]
                    }
                }
            },
            costs: '$costs'
        }
    }, {
        $group: {
            _id: '$_id',
            vpItems: {
                $addToSet: {
                    $sum: '$vpItems'
                }
            },
            pCosts: {
                $addToSet: {
                    $sum: '$costs.price'
                }
            }
        }
    }, {
        $project: {
            _id: 1,
            amount: {
                $subtract: [{
                    $arrayElemAt: ["$vpItems", 0]
                }, {
                    $arrayElemAt: ["$pCosts", 0]
                }]
            }
        }
    }])

Phiên bản Mongo 2.6

$ unwind các mục và nhóm thành tổng giá trị calcualte được trả về từ việc nhân giá &giá trị của mặt hàng và $ chi phí xả hàng để tính tổng giá và giá trị của mặt hàng và dự án $ trừ các giá trị từ nhóm trước đó để tính số tiền cuối cùng.

aggregate([{
      $unwind: '$items'
  }, {
      $group: {
          _id: '$_id',
          totalItems: {
              $sum: {
                  $multiply: ["$items.value", "$items.price"]
              }
          },
          costs: {
              $first: '$costs'
          }
      }
  }, {
      $unwind: '$costs'
  }, {
      $group: {
          _id: '$_id',
          totalItems: {
              $first: '$totalItems'
          },
          totalPrice: {
              $sum: '$costs.price'
          }
      }
  }, {
      $project: {
          _id: 1,
          amount: {
              $subtract: ['$totalItems', '$totalPrice']
          }
      }
  }])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Làm cách nào để sắp xếp theo nhiều trường trong mongodb với Perl?

  2. Lỗi khi tải MongoDB bởi _Id trong Flask

  3. node.js mongojs findOne callback return error as null

  4. Truy vấn trên siêu dữ liệu MongoDB GridFS (Java)

  5. Không tìm thấy lớp 'MongoDB \ Driver \ Manager'