Introduction
Les opérations d'agrégation sont en fait utilisées pour l'analyse statistique des données. En termes simples, elles peuvent être comprises comme des opérations d'agrégation dans SQL . Les opérations d'agrégation dans MongoDB sont préparées pour l'analyse de données volumineuses. Voici une brève introduction à l' utilisation de l' agrégat
Analyse d'agrégation en mode pipeline
Le cadre d'agrégation de MongoDB est implémenté en référence aux commandes de pipeline sous UNIX . Les données passent par un pipeline à plusieurs étapes, et chaque étape traite les données et renvoie finalement l'ensemble de résultats requis.
L'agrégation de pipeline peut fonctionner sur une collection fragmentée ( Le pipeline d'agrégation peut fonctionner sur une collection fragmentée. )
L'agrégation de pipeline peut utiliser des index pour améliorer les performances à certaines étapes. De plus, l'agrégation de pipeline a également une étape d'optimisation interne (plus tard, l'agrégation de pipeline L'optimisation sera discuté).
Les exploitants de pipelines courants sont les suivants :
opérateur |
illustrer |
$ match |
filtrer les documents |
limite $ |
Limiter les données des fichiers dans le pipeline |
$ sauter |
ignorer le nombre de documents spécifié |
$sort |
Trier les documents saisis |
$groupe |
Calculer les résultats agrégés après regroupement des documents |
$out |
Documents de sortie vers une collection spécifique (doit être la dernière étape de l'opération de pipeline) |
Opérateurs d'agrégation utilisés avec $ group :
opérateur |
illustrer |
$premier |
Renvoie la première valeur après le groupe |
$dernier |
Renvoie la dernière valeur après le groupe |
$max |
La valeur maximale après le groupe |
$min |
La valeur minimale après le groupe |
$moy |
moyenne après groupe |
$ somme |
somme après groupe |
Exemple:
db.Collection.aggregate(
{$match : {"appId" : "2e1800b22ae70600", "leaveTime" : {"$gt" : ISODate("2017-07-12T00:00:00"), "$lt" : ISODate("2017-07- 13T00:00:00")}}},
{$group : {"_id" : "$leaveMethod", "count" : {$sum : 1}}},
{$sort : {"_id" : 1}}
)
Intégration dans les opérations Java
Importez d'abord le package de pilotes Java de mongodb mongo-java-driver-3.2.2.jar
Utilisez le nouvel objet Document() pour remplacer la condition {"XXX": "XXX"} ci-dessus
Exemple:
public String aggregateLeaveMethodByDate(String app_id, Date beginDate, Date endDate) throws Exception {
MongoCollection<Document> collection = PluginMongo.instance().getDatabase().getCollection(MongoCollectionName.PARKING_RECORD);
Document sub_match = new Document();
sub_match.put("appId", app_id);
sub_match.put("leaveTime", new Document("$gt", beginDate).append("$lt", endDate));
Document sub_group = new Document();
sub_group.put("_id", "$leaveMethod");
sub_group.put("count", new Document("$sum", 1));
Document match = new Document("$match", sub_match);
Document group = new Document("$group", sub_group);
Document sort = new Document("$sort", new Document("_id", 1));
List<Document> aggregateList = new ArrayList<Document>();
aggregateList.add(match);
aggregateList.add(group);
aggregateList.add(sort);
JSONObject ret_obj = new JSONObject();
AggregateIterable<Document> resultset = collection.aggregate(aggregateList);
MongoCursor<Document> cursor = resultset.iterator();
try {
while(cursor.hasNext()) {
Document item_doc = cursor.next();
int leaveMethod = item_doc.getInteger("_id", 0);
int count = item_doc.getInteger("count", 0);
LeaveMethodEnum leaveMethodVal = LeaveMethodEnum.fromType(leaveMethod);
ret_obj.put(leaveMethodVal.name(), count);
}
} finally {
cursor.close();
}
return ret_obj.toJSONString();
}