MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

Kueri perhitungan Mongodb--perkalian kumulatif

Anda dapat menggunakan agregasi di bawah ini:

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 ] }] } ] }
            }
          }
        }
      }
    }
  }
])

Pada dasarnya untuk menghitung nilai untuk n-th elemen yang harus Anda ketahui hal-hal berikut:

  • nilai jual elemen pertama ($first di $group )
  • array dari semua growths ($push di $group )
  • n yang menunjukkan berapa banyak perkalian yang harus Anda lakukan

Untuk menghitung indeks, Anda harus $push semua elemen menjadi satu larik lalu gunakan $unwind dengan includeArrayIndex opsi yang akan menyisipkan indeks dari array yang tidak dibuka ke bidang index .

Langkah terakhir menghitung perkalian kumulatif. Ini menggunakan $slice dengan index bidang untuk mengevaluasi berapa banyak growths harus diproses. Jadi akan ada satu elemen untuk 601 , dua elemen untuk 602 dan seterusnya.

Maka saatnya untuk $reduce untuk memproses larik tersebut dan melakukan perkalian berdasarkan rumus Anda:(1 + (growth/100) )




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB Pesanan/grup agregasi penjualan Per Bulan Jumlah Total + Bidang Hitung

  2. Express.js - Filter id mongodb di URL

  3. MongoDB:Haruskah Anda tetap memberikan ID yang menautkan ke koleksi lain atau hanya menyertakan koleksi?

  4. Ulangi koleksi besar di MongoDB melalui spring-data

  5. Mongodb memasukkan dokumen tanpa bidang _id