sql >> Databasteknik >  >> NoSQL >> MongoDB

Hämta ett värde från MongoDB efter dess nyckelnamn

1. Översikt

I den här handledningen lär vi oss hur man hämtar ett värde från MongoDB efter nyckelnamn. Vi kommer att utforska olika metoder för MongoDB, för att hämta nyckelfältnamnen för dokumenten baserat på tillämpade filter. Först använder vi hitta eller findone metod för att hämta den nödvändiga informationen och senare använda aggregering metod. Här kommer vi att skriva frågor både i MongoDB-skalfrågan och Java-drivrutinskoden.

Låt oss titta på de olika sätten att hämta värdet i MongoDB med ett fältnamn.

2. Databasinitiering

För att börja måste vi skapa en ny databas baeldung och en ny samling, resor :

use baeldung;
db.createCollection(travel);

Låt oss nu lägga till lite dummy-data i samlingen med hjälp av insertMany metod för 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]"
}
]);

Ovanstående insertMany query returnerar följande JSON:

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

Hittills har vi infogat dummydata i samlingen resor .

3. Använda hitta Metod

hittet metod hittar och returnerar dokument som matchar de angivna frågekriterierna i samlingen. Om flera dokument matchar villkoret returneras alla dokument baserat på dokumentens ordning på disken. Dessutom, i MongoDB, hit metod stöder parameterprojektion i frågan. Om vi ​​anger en projektionsparameter i hitta metod, returnerar den alla dokument som endast innehåller projektionsfält.

En viktig punkt att notera är att _id fältet ingår alltid i svaret om det inte uttryckligen tas bort.

För att demonstrera, låt oss titta på skalfrågan för att projicera ett nyckelfält:

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

Svaret på ovanstående fråga kommer att vara:

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

Här, i den här frågan, projicerade vi helt enkelt passengerId. Låt oss nu titta på nyckelfältet med undantag för _id :

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

Ovanstående fråga kommer att ha följande svar:

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

Här, i den här frågan, exkluderade vi _id fältet från svarsprojektionen. Låt oss se Java-drivrutinskoden för ovanstående fråga:

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

I koden ovan skapade vi först en MongoClient anslutning till den lokala mongoservern som körs på port 27017 . Därefter använde vi hit metod, som har två parametrar, queryFilter, och projektion. Frågan DBObject innehåller de filter som vi behöver för att hämta data. Här skrev vi ut alla projicerade fält av resedokument med DBCursor .

4. Använda aggregering Metod

aggregationen operationer i MongoDB bearbetar dataposter och dokument och returnerar beräknade resultat. Den samlar in värden från olika dokument och grupperar dem innan de utför olika typer av operationer på de grupperade data, såsom summa, medelvärde, minimum, maximum, etc.

Vi kan använda MongoDB-aggregationspipeline när vi behöver göra mer komplex aggregering. Aggregationspipelines är samlingar av steg kombinerade med MongoDB-frågesyntax för att ge aggregerade resultat.

Låt oss titta på aggregeringsfrågan för att hämta värdet efter nyckelnamn:

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

Svaret på ovanstående aggregeringsfråga kommer att vara:

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

I det här fallet använde vi $project steget i aggregationspipelinen. $project anger vilka fält som ska inkluderas eller exkluderas. I vår fråga skickade vi bara passagerar-ID till projektionsstadiet.

Låt oss titta på Java-drivrutinskoden för ovanstående fråga:

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

Vi kan också skriva aggregeringspipelinen på följande sätt:

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

Vi skapade en aggregeringspipeline med java-drivrutinskoden och satte in projektstadiet så att det bara inkluderade passengerId fält. Slutligen skickade vi aggregeringspipelinen till aggregatet metod för att hämta data.


  1. Varför returnerar mongoosemodellens hasOwnProperty falskt när egenskapen existerar?

  2. hdel inuti hget block nodejs redis

  3. MongoDB jokertecken i nyckeln till en fråga

  4. MongoDB - Släpp en samling