MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Pobierz wartość z MongoDB według jej nazwy klucza

1. Przegląd

W tym samouczku dowiemy się, jak pobrać wartość z MongoDB według nazwy klucza. Zbadamy różne metody MongoDB, aby pobrać nazwy pól kluczowych dokumentów na podstawie zastosowanych filtrów. Najpierw użyjemy znajdź lub znajdź metodę pobierania wymaganych danych i późniejszego wykorzystania agregacji metoda. Tutaj będziemy pisać zapytania zarówno w zapytaniu powłoki MongoDB, jak i w kodzie sterownika Java.

Przyjrzyjmy się różnym sposobom pobierania wartości w MongoDB według nazwy pola.

2. Inicjalizacja bazy danych

Aby rozpocząć, musimy skonfigurować nową bazę danych baeldung i nową kolekcję podróże :

use baeldung;
db.createCollection(travel);

Dodajmy teraz do kolekcji kilka fikcyjnych danych za pomocą insertMany metoda 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]"
}
]);

Powyższy insertMany zapytanie zwróci następujący JSON:

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

Do tej pory wstawiliśmy fikcyjne dane do kolekcji podróże .

3. Korzystanie z funkcji znajdź Metoda

znajdź Metoda znajduje i zwraca dokumenty, które pasują do określonych kryteriów zapytania w kolekcji. Jeśli wiele dokumentów spełnia warunek, zwróci wszystkie dokumenty na podstawie kolejności dokumentów na dysku. Dodatkowo w MongoDB znajdź Metoda obsługuje projekcję parametrów w zapytaniu. Jeśli określimy parametr projekcji w znajdź metoda, zwróci wszystkie dokumenty zawierające tylko pola projekcji.

Najważniejszą kwestią, na którą należy zwrócić uwagę, jest to, że _id pole jest zawsze zawarte w odpowiedzi, chyba że zostanie wyraźnie usunięte.

Aby to zademonstrować, przyjrzyjmy się zapytaniu powłoki, aby wyświetlić pole kluczowe:

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

Odpowiedzią na powyższe zapytanie będzie:

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

W tym zapytaniu po prostu przewidzieliśmy passengerId. Przyjrzyjmy się teraz polu kluczowemu z wyłączeniem _id :

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

Powyższe zapytanie będzie miało następującą odpowiedź:

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

W tym zapytaniu wykluczyliśmy _id pole z projekcji odpowiedzi. Zobaczmy kod sterownika Java dla powyższego zapytania:

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

W powyższym kodzie najpierw utworzyliśmy MongoClient połączenie z lokalnym serwerem mongo działającym na porcie 27017 . Następnie użyliśmy funkcji znajdź metoda, która ma dwa parametry, queryFilter i projekcja. Zapytanie DBObject zawiera filtry, na których musimy pobrać dane. Tutaj wydrukowaliśmy wszystkie przewidywane pola dokumentów podróży za pomocą DBCursor .

4. Korzystanie z agregacji Metoda

Agregacja operacje w MongoDB przetwarzają rekordy danych i dokumenty oraz zwracają obliczone wyniki. Zbiera wartości z różnych dokumentów i grupuje je przed wykonaniem różnych typów operacji na zgrupowanych danych, takich jak suma, średnia, minimum, maksimum itp.

Możemy użyć potoku agregacji MongoDB, gdy musimy wykonać bardziej złożoną agregację. Potoki agregacji to zbiory etapów połączone ze składnią zapytań MongoDB w celu uzyskania zagregowanych wyników.

Przyjrzyjmy się zapytaniu agregującemu, aby pobrać wartość według nazwy klucza:

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

Odpowiedzią na powyższe zapytanie agregujące będzie:

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

W tym przypadku użyliśmy projektu $ etap procesu agregacji. $projekt określa, jakie pola należy uwzględnić lub wykluczyć. W naszym zapytaniu przekazaliśmy tylko identyfikator pasażera do etapu projekcji.

Spójrzmy na kod sterownika Java dla powyższego zapytania:

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

Możemy również napisać potok agregacji w następujący sposób:

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

Utworzyliśmy potok agregacji z kodem sterownika java i ustawiliśmy etap projektu tylko tak, aby zawierał passengerId pole. Na koniec przekazaliśmy potok agregacji do agregacji metoda pobierania danych.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Rusztowania Yeoman, Mongoose i MongoDB

  2. Eksportuj wyniki struktury agregacji mongodb do nowej kolekcji

  3. Napisz swojego pierwszego doradcę

  4. Dlaczego otrzymuję to przestarzałe ostrzeżenie?! MongoDB

  5. Wybierz dokumenty, w których wszystkie wartości w polu tablicy istnieją w innej tablicy