English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Le operazioni di aggregazione elaborano i record di dati e restituiscono i risultati calcolati. Le operazioni di aggregazione raggruppano i valori provenienti da più documenti e possono eseguire vari operazioni sui dati raggruppati per restituire un singolo risultato. In SQL, count(*) e group by sono equivalenti alle aggregazioni di MongoDB.
Per le aggregazioni di MongoDB, dovresti utilizzare aggregate() Metodo.
aggregate()La sintassi di base del metodo è la seguente-
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
Nella raccolta, disponi dei seguenti dati-
{ _id: ObjectId(7df78ad8902c) title: 'Panoramica MongoDB', description: 'MongoDB non è un database SQL', by_user: 'oldtoolbag.com', url: 'https://it.oldtoolbag.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100 }, { _id: ObjectId(7df78ad8902d) title: 'Panoramica NoSQL', description: 'I database No SQL sono molto veloci', by_user: 'oldtoolbag.com', url: 'https://it.oldtoolbag.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 10 }, { _id: ObjectId(7df78ad8902e) title: 'Panoramica di Neo4j', description: 'Neo4j è un database No SQL', by_user: 'Neo4j', url: 'http://www.neo4j.com', tags: ['neo4j', 'database', 'NoSQL'], likes: 750 },
Ora, se si desidera visualizzare un elenco che mostri quante tutorial hanno scritto ciascun utente dal set sopra, si utilizzerà il seguenteaggregate()Metodo-
> db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : 1}}}]) { "_id" : "oldtoolbag.com", "num_tutorial" : 2 } { "_id" : "Neo4j", "num_tutorial" : 1 } >
La query SQL equivalente ai casi sopra è select by_user, count(*) from mycol group by by_user.
Nell'esempio sopra, abbiamo ordinato per campoby_userI documenti sono raggruppati e il valore di sum precedente aumenta ogni volta che si raggruppa per utente. Ecco l'elenco delle espressioni aggregate disponibili.
Espressione | Descrizione | Esempio |
---|---|---|
$sum | Calcola la somma. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}]) |
$avg | Calcola la media. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}]) |
$min | Ottieni il valore minimo corrispondente a tutti i documenti nella raccolta. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}]) |
$max | Ottieni il valore massimo corrispondente a tutti i documenti nella raccolta. | db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}]) |
$push | Inserisci un valore in un array nel documento dei risultati. | 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"}}}]) |
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
Inserisci un valore in un array di documenti di risultato, senza creare copie. $addToSet
db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
Ottieni i dati del primo documento in base all'ordinamento dei documenti delle risorse. $first
db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])Ottieni i dati dell'ultimo documento in base all'ordinamento dei documenti delle risorse. $last
db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])La pipeline di aggregazione di MongoDB trasmette i documenti MongoDB da un pipeline a un altro dopo che un pipeline è stato elaborato. Le operazioni di pipeline possono essere ripetute. La pipeline è generalmente utilizzata in Unix e Linux per passare l'output di un comando come parametro del comando successivo. Concetto di pipeline
Espressione: Elabora il documento di input e lo esporta. L'espressione è invariabile, può essere utilizzata solo per calcolare il documento corrente nella pipeline di aggregazione, non può elaborare altri documenti. Espressione:Ecco alcune operazioni comuni nel framework di aggregazione:
:Modifica la struttura dei documenti di input. Può essere utilizzato per rinominare campi, aggiungere o eliminare domini, e può anche essere utilizzato per creare risultati di calcolo e documenti annidati. $project:Utilizzato per filtrare i dati, esporta solo i documenti che soddisfano i criteri. $match utilizza l'operazione di query standard di MongoDB.
:Limita il numero di documenti restituiti dalla pipeline di aggregazione di MongoDB. $limit:Salta un numero specificato di documenti nella pipeline di aggregazione e restituisce i documenti rimanenti. $skip
:Divide un campo tipo array di un documento in più voci, ciascuna contenente un valore dell'array. $unwind:Raggruppa i documenti di una raccolta, può essere utilizzato per risultati di statistica. $group
ordina:Ordina i documenti di input e li esporta. $sort
$geoNear:Esporta documenti ordinati vicini a una posizione geografica.
1、$project istanza
db.article.aggregate( { $project : { title : 1 , author : 1 , }} );
In questo modo, nel risultato rimarranno solo i campi _id, tilte e author, di default il campo _id è incluso, se si desidera escludere _id, si può fare così:
db.article.aggregate( { $project : { _id : 0 , title : 1 , author : 1 }});
2. Esempio di $match
db.articles.aggregate( [ { $match : { score : { $gt : 70, $lte : 90 } } }, { $group: { _id: null, count: { $sum: 1 } } } ] );
$match utilizzato per ottenere i record con punteggio maggiore di 70 e minore o uguale a 90, quindi inviare i record che soddisfano i criteri al pipeline operatore $group successivo.
3. Esempio di $skip
db.article.aggregate( { $skip : 5 });
Dopo l'operazione di pipeline $skip, i primi cinque documenti sono stati "filtrati".