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

Truy vấn tính toán Mongodb - phép nhân tích lũy

Bạn có thể sử dụng tổng hợp dưới đây:

db.ccpsample.aggregate([
  { $sort: { ccp_id: 1, period: 1 } },
  { 
    $group: {
      _id: "$ccp_id",
      items: { $push: "$$ROOT" },
      baseSale: { $first: "$sales" },
      growths: { $push: "$growth" }
    }
  },
  {
    $unwind: {
      path: "$items",
      includeArrayIndex: "index"
    }
  },
  {
    $project: {
      cpp_id: "$items.cpp_id",
      period: "$items.period",
      growth: "$items.growth",
      sales: {
        $cond: {
          if: { $ne: [ "$items.sales", "NULL" ] },
          then: "$items.sales",
          else: {
            $reduce: {
              input: { $slice: [ "$growths", "$index" ] },
              initialValue: "$baseSale",
              in: { $multiply: [ "$$value", { $add: [1, { $divide: [ "$$this", 100 ] }] } ] }
            }
          }
        }
      }
    }
  }
])

Về cơ bản để tính toán giá trị cho n-th yếu tố bạn phải biết những điều sau:

  • giá trị bán hàng của phần tử đầu tiên ($first trong $group )
  • mảng của tất cả các growths ($push trong $group )
  • n cho biết bạn phải thực hiện bao nhiêu phép nhân

Để tính toán chỉ số, bạn nên $push tất cả các phần tử vào một mảng và sau đó sử dụng $unwind với includeArrayIndex tùy chọn sẽ chèn chỉ mục của mảng không được cuộn vào trường index .

Bước cuối cùng tính toán nhân tích lũy. Nó sử dụng $ slice với index trường để đánh giá số lượng growths nên được xử lý. Vì vậy, sẽ có một phần tử cho 601 , hai phần tử cho 602 và như vậy.

Sau đó, đã đến lúc giảm $ để xử lý mảng đó và thực hiện các phép nhân dựa trên công thức của bạn:(1 + (growth/100) )




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Lỗi Mongo DB:toán tử không hợp lệ:$ search khi thực hiện tìm kiếm $ text

  2. Mongoose, sắp xếp truy vấn theo trường phổ biến

  3. Bản sao MongoDB không có thiết lập chính, cần thiết lập bản sao chính mới

  4. Thiết kế bảng MongoDB và Hiệu suất truy vấn

  5. Mongoose - Truy vấn tài liệu mới nhất