sql >> Database >  >> NoSQL >> MongoDB

Haal een waarde op uit MongoDB op basis van de sleutelnaam

1. Overzicht

In deze zelfstudie leren we hoe u een waarde uit MongoDB kunt ophalen op sleutelnaam. We zullen verschillende methoden van MongoDB verkennen om de sleutelveldnamen van de documenten op te halen op basis van toegepaste filters. Eerst gebruiken we de vinden of vinden methode om de vereiste gegevens op te halen en later de aggregatie . te gebruiken methode. Hier zullen we query's schrijven, zowel in de MongoDB-shellquery als in de Java-stuurprogrammacode.

Laten we eens kijken naar de verschillende manieren om de waarde in MongoDB op te halen door middel van een veldnaam.

2. Database-initialisatie

Om te beginnen, moeten we een nieuwe database opzetten baeldung en een nieuwe collectie, travel :

use baeldung;
db.createCollection(travel);

Laten we nu wat dummy-gegevens aan de verzameling toevoegen met behulp van de insertMany methode van 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]"
}
]);

De bovenstaande insertMany query retourneert de volgende JSON:

{
    "acknowledged" : true,
    "insertedIds" : [
        ObjectId("623d7f079d55d4e137e47825"),
	ObjectId("623d7f079d55d4e137e47826"),
	ObjectId("623d7f079d55d4e137e47827"),
        ObjectId("623d7f079d55d4e137e47828")
    ]
}

Tot nu toe hebben we de dummy-gegevens ingevoegd in de verzameling reizen .

3. De vinden . gebruiken Methode

De vondst methode vindt en retourneert documenten die voldoen aan de opgegeven querycriteria voor de verzameling. Als meerdere documenten aan de voorwaarde voldoen, worden alle documenten geretourneerd op basis van de volgorde van documenten op de schijf. Bovendien, in MongoDB, de vond methode ondersteunt parameterprojectie in de query. Als we een projectieparameter specificeren in de find methode, retourneert het alle documenten die alleen projectievelden bevatten.

Een belangrijk punt om op te merken is dat de _id veld is altijd opgenomen in het antwoord, tenzij expliciet verwijderd.

Laten we ter demonstratie eens kijken naar de shell-query om een ​​sleutelveld te projecteren:

db.travel.find({},{"passengerId":1}).pretty();

Het antwoord op de bovenstaande vraag is:

{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }

Hier, in deze query, projecteerden we eenvoudig de passengerId. Laten we nu eens kijken naar het sleutelveld met uitsluiting van _id :

db.travel.find({},{"passengerId":1,"_id":0}).pretty();

De bovenstaande vraag zal het volgende antwoord hebben:

{ "passengerId" : 145 }
{ "passengerId" : 148 }
{ "passengerId" : 154 }
{ "passengerId" : 168 }

Hier, in deze zoekopdracht, hebben we de _id . uitgesloten veld uit de responsprojectie. Laten we eens kijken naar de Java-stuurprogrammacode voor de bovenstaande vraag:

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());
}

In de bovenstaande code hebben we eerst een MongoClient . gemaakt verbinding met de lokale mongo-server die draait op poort 27017 . Vervolgens gebruikten we de vinden methode, die twee parameters heeft, de queryFilter, en projectie. De zoekopdracht DBObject bevat de filters waarop we de gegevens moeten ophalen. Hier hebben we alle geprojecteerde velden van reisdocumenten afgedrukt met behulp van de DBCursor .

4. De aggregatie gebruiken Methode

De aggregatie bewerkingen in MongoDB verwerken gegevensrecords en documenten en retourneren berekende resultaten. Het verzamelt waarden uit verschillende documenten en groepeert ze voordat verschillende soorten bewerkingen worden uitgevoerd op de gegroepeerde gegevens, zoals som, gemiddelde, minimum, maximum, enz.

We kunnen de MongoDB-aggregatiepijplijn gebruiken wanneer we complexere aggregatie moeten doen. Aggregatiepijplijnen zijn verzamelingen van fasen gecombineerd met MongoDB-querysyntaxis om geaggregeerde resultaten op te leveren.

Laten we eens kijken naar de aggregatiequery om de waarde op sleutelnaam op te halen:

db.travel.aggregate([
{
    "$project":{
        "passengerId":1
    }
}
]).pretty();

Het antwoord op de bovenstaande aggregatiequery zal zijn:

{ "_id" : ObjectId("623d7f079d55d4e137e47825"), "passengerId" : 145 }
{ "_id" : ObjectId("623d7f079d55d4e137e47826"), "passengerId" : 148 }
{ "_id" : ObjectId("623d7f079d55d4e137e47827"), "passengerId" : 154 }
{ "_id" : ObjectId("623d7f079d55d4e137e47828"), "passengerId" : 168 }

In dit geval gebruikten we het $project fase van de aggregatiepijplijn. $project specificeert welke velden moeten worden opgenomen of uitgesloten. In onze zoekopdracht hebben we alleen de PassengerId doorgegeven aan de projectiefase.

Laten we eens kijken naar de Java-stuurprogrammacode voor de bovenstaande vraag:

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);

We kunnen de aggregatiepijplijn ook op de volgende manier schrijven:

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);

We hebben een aggregatiepijplijn gemaakt met de Java-stuurprogrammacode en hebben de projectfase alleen ingesteld om de passengerId op te nemen veld. Ten slotte hebben we de aggregatiepijplijn doorgegeven aan de aggregaat methode om de gegevens op te halen.


  1. Vergrendelen en opnieuw instellen

  2. Implementatie en onderhoud van MongoDB met behulp van Ansible

  3. Hoe installeer ik Redis

  4. Hoe u zeer beschikbare open source database-omgevingen kunt ontwerpen