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

Kelompokkan dan Jumlahkan sesuai dengan persentase posisi Agregasi MongoDb

Anda dapat mencoba agregasi di bawah ini dalam pipa 3.4.

Tetapkan bobot berdasarkan posisi elemen.

$switch case untuk memberikan bobot yang berbeda berdasarkan ukuran array.

db.col.aggregate([{"$addFields":{
  "myArray":{
    "$switch":{
      "branches":[{
        "case":{"$gt":[{"$size":"$myArray"},2]},
        "then":{"$concatArrays":[
            [{"value":{"$arrayElemAt":["$myArray.value",0]},"weight":{"$divide":[2,5]}}],
            {"$map":{
              "input":{"$slice":["$myArray",1,{"$subtract":[{"$size":"$myArray"},2]}]},
              "as":"val",
              "in":{"value":"$$val.value","weight":{"$divide": [{"$divide":[1,5]},{"$subtract":[{"$size":"$myArray"},2]} ]}}
            }},
            [{"value":{"$arrayElemAt":["$myArray.value",-1]},"weight":{"$divide":[2,5]}}]
          ]}
       },
       {
        "case":{"$eq":[{"$size":"$myArray"},2]},
        "then":{"$concatArrays":[
          [{"value":{"$arrayElemAt":["$myArray.value",0]},"weight":{"$divide":[1,2]}}],
          [{"value":{"$arrayElemAt":["$myArray.value",-1]},"weight":{"$divide":[1,2]}}]
        ]}
       }],
    "default":{"$concatArrays":[
      [{"value":{"$arrayElemAt":["$myArray.value",0]},"weight":1}],
    ]}}
  }
}},
{"$unwind":"$myArray"},
{"$group":{
  "_id":"$myArray.value",
  "linear_total":{"$sum":{"$multiply":["$myArray.weight","$total"]}}
}},
{"$sort":{"_id":1}}])



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Menggunakan JSON dengan MongoDB?

  2. Mongodb upsert melempar DuplicateKeyException

  3. Bagaimana mengubah sub dokumen setelah menemukan dengan luwak

  4. Hapus fungsi tidak berfungsi dengan angularJS

  5. MongoDB/JS - Pencarian Faceted Tingkat Lanjut - Cara mendapatkan hanya kategori/nilai yang relevan