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

Agregat Mongodb (hitungan) di beberapa bidang secara bersamaan

Kerangka kerja agregasi tidak akan membuat kunci berdasarkan data, atau seharusnya Anda bahkan melakukannya karena "data" bukanlah kunci tetapi sebenarnya data, jadi Anda harus tetap berpegang pada polanya.

Itu berarti pada dasarnya Anda dapat melakukan ini:

db.data.aggregate([
    { "$group": {
        "_id": {
            "event_type": "$event",
            "day": { "$dayOfWeek": "$date" }
        },
        "count": { "$sum": 1 } 
    }}
])

Dan itu akan menghitung kemunculan per hari dalam seminggu per peristiwa, meskipun dalam beberapa dokumen di output, tetapi ini mudah diubah menjadi satu dokumen per peristiwa:

db.data.aggregate([
    { "$group": {
        "_id": {
            "event_type": "$event",
            "day": { "$dayOfWeek": "$date" }
        },
        "count": { "$sum": 1 } 
    }},
    { "$group": {
        "_id": "$_id.event_type",
        "days": { "$push": { "day": "$_id.day", "count": "$count" } }
    }}
])

Dan itu dalam bentuk array, tetapi masih menyimpan hasil yang Anda inginkan.

Jika Anda benar-benar bertekad untuk melakukan bentuk yang tepat, maka Anda ingin melakukan sesuatu seperti ini:

db.data.aggregate([
    { "$group": {
        "_id": "$event",
        "1": {
            "$sum": {
                "$cond": [
                    { "$eq": [{ "$dayOfWeek": "$date" }, 1 ] },
                    1,
                    0
                ]
            }
        },
        "2": {
            "$sum": {
                "$cond": [
                    { "$eq": [{ "$dayOfWeek": "$date" }, 2 ] },
                    1,
                    0
                ]
            }
        },
        "3": {
            "$sum": {
                "$cond": [
                    { "$eq": [{ "$dayOfWeek": "$date" }, 3 ] },
                    1,
                    0
                ]
            }
        },
        "4": {
            "$sum": {
                "$cond": [
                    { "$eq": [{ "$dayOfWeek": "$date" }, 4 ] },
                    1,
                    0
                ]
            }
        },
        "5": {
            "$sum": {
                "$cond": [
                    { "$eq": [{ "$dayOfWeek": "$date" }, 5 ] },
                    1,
                    0
                ]
            }
        },
        "6": {
            "$sum": {
                "$cond": [
                    { "$eq": [{ "$dayOfWeek": "$date" }, 6 ] },
                    1,
                    0
                ]
            }
        },
        "7": {
            "$sum": {
                "$cond": [
                    { "$eq": [{ "$dayOfWeek": "$date" }, 7 ] },
                    1,
                    0
                ]
            }
        }
    }}
)

Tapi itu benar-benar bertele-tele jadi IMHO saya akan tetap dengan solusi pertama atau mungkin kedua karena lebih pendek dan lebih mudah dibaca.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Sisipan mongodb/luwak bukan fungsi

  2. Bagaimana saya bisa menambahkan id unik dua kolom ke mongodb di aplikasi meteor?

  3. Tidak dapat terhubung ke MongoDB karena URI yang salah

  4. Keamanan Basis Data 101:Memahami Hak Istimewa Akses Basis Data

  5. Aplikasi Heroku mogok setelah MongoDB diperbarui ke 3.0