1. Übersicht
In diesem Tutorial erfahren Sie, wie Sie einen Wert aus MongoDB anhand des Schlüsselnamens abrufen. Wir werden verschiedene Methoden von MongoDB untersuchen, um die Schlüsselfeldnamen der Dokumente basierend auf angewendeten Filtern abzurufen. Zuerst verwenden wir den find oder findone -Methode, um die erforderlichen Daten abzurufen und später die Aggregation zu verwenden Methode. Hier schreiben wir Abfragen sowohl in der MongoDB-Shell-Abfrage als auch im Java-Treibercode.
Sehen wir uns die verschiedenen Möglichkeiten zum Abrufen des Werts in MongoDB anhand eines Feldnamens an.
2. Datenbankinitialisierung
Zu Beginn müssen wir eine neue Datenbank baeldung einrichten und eine neue Kollektion, Reisen :
use baeldung;
db.createCollection(travel);
Lassen Sie uns nun mithilfe von insertMany einige Dummy-Daten zur Sammlung hinzufügen Methode von 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]"
}
]);
Die obige insertMany -Abfrage gibt das folgende JSON zurück:
{
"acknowledged" : true,
"insertedIds" : [
ObjectId("623d7f079d55d4e137e47825"),
ObjectId("623d7f079d55d4e137e47826"),
ObjectId("623d7f079d55d4e137e47827"),
ObjectId("623d7f079d55d4e137e47828")
]
}
Bisher haben wir die Dummy-Daten in die Sammlung Reisen eingefügt .
3. Verwenden der Suche Methode
Der fund -Methode findet und gibt Dokumente zurück, die den angegebenen Abfragekriterien in der Sammlung entsprechen. Wenn mehrere Dokumente der Bedingung entsprechen, werden alle Dokumente basierend auf der Reihenfolge der Dokumente auf der Festplatte zurückgegeben. Zusätzlich wird in MongoDB die Datei find -Methode unterstützt die Parameterprojektion in der Abfrage. Wenn wir einen Projektionsparameter in find angeben -Methode werden alle Dokumente zurückgegeben, die nur Projektionsfelder enthalten.
Ein wichtiger zu beachtender Punkt ist, dass die _id Feld ist immer in der Antwort enthalten, es sei denn, es wird explizit entfernt.
Sehen wir uns zur Demonstration die Shell-Abfrage an, um ein Schlüsselfeld zu projizieren:
db.travel.find({},{"passengerId":1}).pretty();
Die Antwort auf die obige Abfrage lautet:
{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }
Hier in dieser Abfrage haben wir einfach die passengerId projiziert. Schauen wir uns nun das Schlüsselfeld mit Ausnahme von _id an :
db.travel.find({},{"passengerId":1,"_id":0}).pretty();
Die obige Abfrage hat die folgende Antwort:
{ "passengerId" : 145 }
{ "passengerId" : 148 }
{ "passengerId" : 154 }
{ "passengerId" : 168 }
Hier, in dieser Abfrage, haben wir die _id ausgeschlossen Feld aus der Antwortprojektion. Sehen wir uns den Java-Treibercode für die obige Abfrage an:
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());
}
Im obigen Code haben wir zuerst einen MongoClient erstellt Verbindung mit dem lokalen Mongo-Server, der auf Port 27017 ausgeführt wird . Als nächstes haben wir find verwendet Methode, die zwei Parameter hat, den queryFilter, und Projektion. Die Abfrage DBObject enthält die Filter, für die wir die Daten abrufen müssen. Hier haben wir alle geplanten Felder von Reisedokumenten mit dem DBCursor gedruckt .
4. Verwenden der Aggregation Methode
Die Aggregation Operationen in MongoDB verarbeiten Datensätze und Dokumente und geben berechnete Ergebnisse zurück. Es sammelt Werte aus verschiedenen Dokumenten und gruppiert sie, bevor es verschiedene Arten von Operationen mit den gruppierten Daten durchführt, wie z. B. Summe, Durchschnitt, Minimum, Maximum usw.
Wir können die MongoDB-Aggregationspipeline verwenden, wenn wir eine komplexere Aggregation durchführen müssen. Aggregationspipelines sind Sammlungen von Phasen, die mit der MongoDB-Abfragesyntax kombiniert werden, um aggregierte Ergebnisse zu erzielen.
Schauen wir uns die Aggregationsabfrage an, um den Wert nach Schlüsselname abzurufen:
db.travel.aggregate([
{
"$project":{
"passengerId":1
}
}
]).pretty();
Die Antwort auf die obige Aggregationsabfrage lautet:
{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }
In diesem Fall haben wir das $project verwendet Stufe der Aggregationspipeline. $Projekt gibt an, welche Felder ein- oder ausgeschlossen werden sollen. In unserer Abfrage haben wir nur die PassengerId in die Projektionsphase übergeben.
Schauen wir uns den Java-Treibercode für die obige Abfrage an:
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);
Wir können die Aggregationspipeline auch folgendermaßen schreiben:
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);
Wir haben eine Aggregationspipeline mit dem Java-Treibercode erstellt und die Projektphase so eingestellt, dass sie nur die passengerId enthält Feld. Schließlich haben wir die Aggregationspipeline an das Aggregat übergeben Methode zum Abrufen der Daten.