Pengagregatan MongoDB
Pengagregatan dalam MongoDB digunakan terutamanya untuk memproses data (seperti purata statistik, jumlah, dll.) dan mengembalikan hasil data yang dikira. Agak serupa dengan count(*) dalam pernyataan sql.
kaedah agregat()
Kaedah agregat dalam MongoDB menggunakan agregat().
Sintaks
Format sintaks asas kaedah agregat() adalah seperti berikut:
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
Instance
Data dalam koleksi adalah seperti berikut:
{ _id: ObjectId(7df78ad8902c) title: 'MongoDB Overview', description: 'MongoDB is no sql database', by_user: 'w3cschool.cc', url: 'http://www.w3cschool.cc', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: 'NoSQL Overview', description: 'No sql database is very fast', by_user: 'w3cschool.cc', url: 'http://www.w3cschool.cc', tags: ['mongodb', 'database', 'NoSQL'], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: 'Neo4j Overview', description: 'Neo4j is no sql database', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: ['neo4j', 'database', 'NoSQL'], likes: 750 },
Kini kami mengira bilangan artikel yang ditulis oleh setiap pengarang melalui koleksi di atas, dan menggunakan aggregate() untuk mengira hasilnya seperti berikut:
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "result" : [ { "_id" : "w3cschool.cc", "num_tutorial" : 2 }, { "_id" : "Neo4j", "num_tutorial" : 1 } ], "ok" : 1 } >
Contoh di atas adalah serupa dengan sql pernyataan: pilih oleh_pengguna, kira(*) daripada kumpulan mycol oleh oleh_pengguna
Dalam contoh di atas, kami mengumpulkan data mengikut medan oleh_pengguna dan mengira jumlah nilai yang sama daripada medan by_user.
Jadual berikut menunjukkan beberapa ungkapan agregat:
表达式 | 描述 | 实例 |
---|---|---|
$sum | 计算总和。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | 计算平均值 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}]) |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据。 | db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}]) |
$last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}]) |
Konsep paip
Pipeline biasanya digunakan dalam Unix dan Linux untuk menggunakan output arahan semasa sebagai parameter arahan seterusnya.
Talian paip pengagregatan MongoDB menghantar hasil dokumen MongoDB ke saluran paip seterusnya untuk diproses selepas satu saluran paip selesai. Operasi saluran paip boleh diulang.
Ungkapan: Memproses dokumen input dan mengeluarkannya. Ungkapan ini tidak mempunyai kewarganegaraan dan hanya boleh digunakan untuk mengira dokumen saluran paip pengagregatan semasa dan tidak boleh memproses dokumen lain.
Di sini kami memperkenalkan beberapa operasi yang biasa digunakan dalam rangka kerja pengagregatan:
$project: Ubah suai struktur dokumen input. Ia boleh digunakan untuk menamakan semula, menambah atau memadam medan, dan juga boleh digunakan untuk membuat hasil pengiraan dan dokumen bersarang.
$match: digunakan untuk menapis data dan hanya mengeluarkan dokumen yang memenuhi syarat. $match menggunakan operasi pertanyaan standard MongoDB.
$limit: digunakan untuk mengehadkan bilangan dokumen yang dikembalikan oleh saluran paip pengagregatan MongoDB.
$skip: Langkau bilangan dokumen yang ditentukan dalam talian paip pengagregatan dan kembalikan dokumen yang tinggal.
$unwind: Pisahkan medan jenis tatasusunan dalam dokumen kepada berbilang medan, setiap satu mengandungi nilai dalam tatasusunan.
$group: Kumpulkan dokumen dalam koleksi dan boleh digunakan untuk keputusan statistik.
$sort: Isih dokumen input dan keluarkannya.
$geoNear: Output memesan dokumen berhampiran dengan lokasi geografi tertentu.
Instance operator saluran paip
1.contoh $project
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
Dalam kes ini, hanya akan ada Terdapat tiga medan: _id, tilt dan author Secara lalai, medan _id disertakan Jika anda tidak mahu menyertakan _id, anda boleh melakukan ini:
db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});
2.$match instance
rreee <. 🎜>$match digunakan untuk mendapatkan rekod dengan markah lebih daripada 70 dan kurang daripada atau sama dengan 90, dan kemudian menghantar rekod yang memenuhi syarat ke peringkat seterusnya $group operator saluran paip untuk diproses. 3.$skip instancedb.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );Selepas diproses oleh operator saluran paip $skip, lima dokumen pertama "ditapis" keluar.