Saya bermain-main dengan MongoDB mencoba mencari cara untuk melakukan yang sederhana
SELECT province, COUNT(*) FROM contest GROUP BY province
Tapi sepertinya saya tidak bisa memahaminya menggunakan fungsi agregat. Saya dapat melakukannya dengan menggunakan beberapa sintaks grup yang sangat aneh
db.user.group({
"key": {
"province": true
},
"initial": {
"count": 0
},
"reduce": function(obj, prev) {
if (true != null) if (true instanceof Array) prev.count += true.length;
else prev.count++;
}
});
Tetapi apakah ada cara yang lebih mudah / lebih cepat menggunakan fungsi agregat?
"errmsg" : "exception: A pipeline stage specification object must contain exactly one field.",
?{ $sort: { count: -1 } }
Saya perlu beberapa operasi tambahan berdasarkan hasil fungsi agregat. Akhirnya saya menemukan beberapa solusi untuk fungsi agregat dan operasi berdasarkan hasil di MongoDB. Saya punya koleksi
Request
dengan bidangrequest, source, status, requestDate
.Grup Bidang Tunggal Menurut & Hitung:
Beberapa Fields Group Menurut & Hitung:
Banyak Kolom Dikelompokkan Menurut & Hitung dengan Sortir menggunakan Bidang:
Beberapa Fields Kelompok Menurut & Hitung dengan Sortir menggunakan Hitung:
sumber
Jika Anda memerlukan beberapa kolom untuk dikelompokkan, ikuti model ini. Di sini saya melakukan penghitungan dengan
status
dantype
:sumber
Selain itu jika Anda perlu membatasi pengelompokan yang dapat Anda gunakan:
sumber
Mulai di MongoDB 3.4, Anda bisa menggunakan
$sortByCount
agregasi.https://docs.mongodb.com/manual/reference/operator/aggregation/sortByCount/
Sebagai contoh:
sumber
$sortByCount
sebenarnya adalah "operator semu" seperti beberapa operator tahap agregasi yang diperkenalkan dari MongoDB 3.4. Yang mereka lakukan hanyalah memperluas ke tahap agregasi masing-masing. Dalam hal ini a$group
dengan$sum: 1
seperti yang ditunjukkan pada jawaban yang ada dan$sort
tahap tambahan . Mereka tidak menawarkan keuntungan selain "mengetik lebih sedikit kode" , yang mungkin atau mungkin tidak lebih deskriptif (jika Anda suka hal-hal semacam itu). IMHO, berbeda$group
dan$sort
tahapan dalam kode jauh lebih deskriptif dan memang lebih fleksibel.Jenis kueri ini berfungsi untuk saya:
Lihat http://docs.mongodb.org/manual/tutorial/aggregation-with-user-preference-data/
sumber
Perintah Mongo shell yang bekerja untuk saya:
sumber