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

Gabungkan $group untuk beberapa rentang tanggal

Anda perlu menentukan kunci pengelompokan secara kondisional berdasarkan di mana tanggal saat ini berada di antara rentang. Ini pada dasarnya dicapai melalui $cond dengan kondisi bersarang dan varian logis dari $lt :

// work out dates somehow
var today = new Date(),
    oneDay = ( 1000 * 60 * 60 * 24 ),
    thirtyDays = new Date( today.valueOf() - ( 30 * oneDay ) ),
    fifteenDays = new Date( today.valueOf() - ( 15 * oneDay ) ),
    sevenDays = new Date( today.valueOf() - ( 7 * oneDay ) );

db.collection.aggregate([
    { "$match": {
        "date": { "$gte": thirtyDays }
    }},
    { "$group": {
        "_id": {
            "$cond": [
                { "$lt": [ "$date", fifteenDays ] },
                "16-30",
                { "$cond": [
                    { "$lt": [ "$date", sevenDays ] },
                    "08-15",
                    "01-07"
                ]}
            ]
        },
        "count": { "$sum": 1 },
        "totalValue": { "$sum": "$value" }
    }}
])

Sebagai $cond adalah operator ternary, kondisi pertama dievaluasi untuk melihat apakah kondisinya benar, dan ketika benar, argumen kedua dikembalikan jika tidak, yang ketiga dikembalikan ketika salah. Jadi dengan membuat sarang $cond . yang lain dalam kasus palsu Anda mendapatkan tes logis di mana tanggal jatuh, baik "kurang dari tanggal 15 hari" yang berarti dalam rentang terlama, atau "kurang dari 7 hari" yang berarti rentang tengah, atau tentu saja dalam rentang terbaru.

Saya hanya mengawali angka di sini kurang dari 10 dengan 0 jadi ini memberi Anda sesuatu untuk diurutkan jika Anda mau, karena output dari "kunci" di $group tidak dengan sendirinya dipesan.

Tapi begitulah cara Anda melakukannya dalam satu kueri. Anda tinggal menentukan kunci pengelompokan apa yang harus didasarkan pada tanggal jatuh dan akumulasi untuk setiap kunci.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB / Meteor / Ekspor MONGO_URL ke aplikasi yang digunakan

  2. Temukan dokumen yang berisi bidang tertentu untuk sub-objek MongoDb dan Node.js

  3. Bagaimana cara melakukan kueri array id di Mongoose?

  4. Kueri agregat MongoDB menggunakan driver PHP

  5. show dbs memberikan Not Authorized untuk mengeksekusi perintah error