1. Présentation
Dans ce tutoriel, nous allons apprendre à récupérer une valeur de MongoDB par nom de clé. Nous explorerons différentes méthodes de MongoDB pour récupérer les noms de champs clés des documents en fonction des filtres appliqués. Tout d'abord, nous allons utiliser la trouver ou trouver méthode pour récupérer les données requises et utiliser ultérieurement l'agrégation méthode. Ici, nous allons écrire des requêtes à la fois dans la requête shell MongoDB et dans le code du pilote Java.
Regardons les différentes manières de récupérer la valeur dans MongoDB par un nom de champ.
2. Initialisation de la base de données
Pour commencer, nous devons mettre en place une nouvelle base de données baeldung et une nouvelle collection, voyage :
use baeldung;
db.createCollection(travel);
Ajoutons maintenant des données factices dans la collection à l'aide de insertMany méthode de MongoDB :
db.travel.insertMany([
{
"passengerId":145,
"passengerName":"Nathan Green",
"passengerAge":25,
"sourceStation":"London",
"destinationStation":"Birmingham",
"seatType":"Slepper",
"emailAddress":"[email protected]"
},
{
"passengerId":148,
"passengerName":"Kevin Joseph",
"passengerAge":28,
"sourceStation":"Manchester",
"destinationStation":"London",
"seatType":"Slepper",
"emailAddress":"[email protected]"
},
{
"passengerId":154,
"passengerName":"Sheldon burns",
"passengerAge":26,
"sourceStation":"Cambridge",
"destinationStation":"Leeds",
"seatType":"Slepper",
"emailAddress":"[email protected]"
},
{
"passengerId":168,
"passengerName":"Jack Ferguson",
"passengerAge":24,
"sourceStation":"Cardiff",
"destinationStation":"Coventry",
"seatType":"Slepper",
"emailAddress":"[email protected]"
}
]);
Le insertMany ci-dessus requête renverra le JSON suivant :
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("623d7f079d55d4e137e47825"),
ObjectId("623d7f079d55d4e137e47826"),
ObjectId("623d7f079d55d4e137e47827"),
ObjectId("623d7f079d55d4e137e47828")
]
}
Jusqu'à présent, nous avons inséré les données factices dans la collection voyage .
3. Utilisation de rechercher Méthode
La trouvaille La méthode recherche et renvoie les documents qui correspondent aux critères de requête spécifiés sur la collection. Si plusieurs documents correspondent à la condition, il renverra tous les documents en fonction de l'ordre des documents sur le disque. De plus, dans MongoDB, le trouver prend en charge la projection de paramètres dans la requête. Si nous spécifions un paramètre de projection dans find , elle renverra tous les documents contenant uniquement des champs de projection.
Un point clé à noter est que le _id Le champ est toujours inclus dans la réponse, sauf s'il est explicitement supprimé.
Pour illustrer, examinons la requête shell pour projeter un champ clé :
db.travel.find({},{"passengerId":1}).pretty();
La réponse à la requête ci-dessus sera :
{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }
Ici, dans cette requête, nous avons simplement projeté le passengerId. Examinons maintenant le champ clé en excluant _id :
db.travel.find({},{"passengerId":1,"_id":0}).pretty();
La requête ci-dessus aura la réponse suivante :
{ "passengerId" : 145 }
{ "passengerId" : 148 }
{ "passengerId" : 154 }
{ "passengerId" : 168 }
Ici, dans cette requête, nous avons exclu le _id champ de la projection de la réponse. Voyons le code du pilote Java pour la requête ci-dessus :
MongoClient mongoClient = new MongoClient("localhost", 27017);
DB database = mongoClient.getDB("baeldung");
DBCollection collection = database.getCollection("travel");
BasicDBObject queryFilter = new BasicDBObject();
BasicDBObject projection = new BasicDBObject();
projection.put("passengerId", 1);
projection.put("_id", 0);
DBCursor dbCursor = collection.find(queryFilter, projection);
while (dbCursor.hasNext()) {
System.out.println(dbCursor.next());
}
Dans le code ci-dessus, nous avons d'abord créé un MongoClient connexion avec le serveur mongo local exécuté sur le port 27017 . Ensuite, nous avons utilisé la trouver méthode, qui a deux paramètres, le queryFilter, et projection. La requête DBObject contient les filtres sur lesquels nous devons récupérer les données. Ici, nous avons imprimé tous les champs projetés des documents de voyage à l'aide du DBCursor .
4. Utilisation de l'agrégation Méthode
L'agrégation les opérations dans MongoDB traitent les enregistrements de données et les documents et renvoient les résultats calculés. Il collecte les valeurs de divers documents et les regroupe avant d'effectuer différents types d'opérations sur les données regroupées, telles que la somme, la moyenne, le minimum, le maximum, etc.
Nous pouvons utiliser le pipeline d'agrégation MongoDB lorsque nous devons effectuer une agrégation plus complexe. Les pipelines d'agrégation sont des ensembles d'étapes combinées à la syntaxe de requête MongoDB pour produire des résultats agrégés.
Examinons la requête d'agrégation pour récupérer la valeur par nom de clé :
db.travel.aggregate([
{
"$project":{
"passengerId":1
}
}
]).pretty();
La réponse à la requête d'agrégation ci-dessus sera :
{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }
Dans ce cas, nous avons utilisé le $project étape du pipeline d'agrégation. $projet spécifie les champs à inclure ou à exclure. Dans notre requête, nous avons uniquement transmis le PassengerId à l'étape de projection.
Examinons le code du pilote Java pour la requête ci-dessus :
ArrayList<Document> response = new ArrayList<>();
ArrayList<Document> pipeline = new ArrayList<>(Arrays.asList(new Document("$project", new Document("passengerId", 1L))));
database = mongoClient.getDatabase("baeldung");
database.getCollection("travel").aggregate(pipeline).allowDiskUse(true).into(response);
System.out.println("response:- " + response);
Nous pouvons également écrire le pipeline d'agrégation de la manière suivante :
ArrayList<Document> response = new ArrayList<>();
ArrayList<Bson> pipeline = new ArrayList<>(Arrays.asList(
project(fields(Projections.exclude("_id"), Projections.include("passengerId")))));
MongoDatabase database = mongoClient.getDatabase("baeldung");
database.getCollection("travel").aggregate(pipeline).allowDiskUse(true).into(response);
System.out.println("response:- "+response);
Nous avons créé un pipeline d'agrégation avec le code du pilote Java et défini l'étape du projet uniquement pour inclure le passengerId domaine. Enfin, nous avons passé le pipeline d'agrégation à l'agrégat méthode pour récupérer les données.