Apakah ada kueri untuk menghitung berapa banyak nilai berbeda yang berisi bidang di DB.
fe Saya memiliki bidang untuk negara dan ada 8 jenis nilai negara (spanyol, inggris, prancis, dll ...)
Jika seseorang menambahkan lebih banyak dokumen dengan negara baru, saya ingin kueri dikembalikan 9.
Apakah ada cara yang lebih mudah daripada mengelompokkan dan menghitung?
Jawaban:
MongoDB memiliki
distinct
perintah yang mengembalikan larik nilai berbeda untuk sebuah bidang; Anda dapat memeriksa panjang array untuk menghitung.Ada juga shell
db.collection.distinct()
helper:sumber
Berikut adalah contoh penggunaan API agregasi. Untuk memperumit kasus, kami mengelompokkan berdasarkan kata-kata yang tidak peka huruf besar / kecil dari properti array dokumen.
yang memberikan hasil seperti
sumber
unwind
diperlukan karena kode mengelompokkan nilai individual dari bidang array yang cocok dengan caradistinct
kerjanya.unwind
diperlukan saat bekerja dengan array.Dengan MongoDb 3.4.4 dan yang lebih baru, Anda dapat memanfaatkan penggunaan
$arrayToObject
operator dan$replaceRoot
pipeline untuk menghitungnya.Misalnya, Anda memiliki kumpulan pengguna dengan peran berbeda dan Anda ingin menghitung jumlah peran yang berbeda. Anda perlu menjalankan pipeline agregat berikut:
Contoh Output
sumber
.distinct()
.Anda dapat memanfaatkan Ekstensi Mongo Shell . Ini adalah impor .js tunggal yang dapat Anda tambahkan ke Anda
$HOME/.mongorc.js
, atau secara terprogram, jika Anda juga melakukan coding di Node.js / io.js.Sampel
Untuk setiap nilai berbeda dari bidang menghitung kemunculan dalam dokumen secara opsional difilter berdasarkan kueri
Parameter bidang bisa berupa larik bidang
sumber
require("./script.js")
, saya kira.mongorc.js
file ke direktori home Anda. Selesai.Untuk menemukan perbedaan dalam
field_1
koleksi tetapi kami menginginkan beberapaWHERE
kondisi juga daripada yang dapat kami lakukan seperti berikut:db.your_collection_name.distinct('field_1', {WHERE condition here and it should return a document})
Jadi, cari nomor yang berbeda
names
dari koleksi di mana usia> 25 akan seperti:db.your_collection_name.distinct('names', {'age': {"$gt": 25}})
Semoga membantu!
sumber