MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Извличане на стойност от MongoDB по нейното ключово име

1. Общ преглед

В този урок ще научим как да извлечем стойност от MongoDB по име на ключ. Ще проучим различни методи на MongoDB, за да извлечем имената на ключовите полета на документите въз основа на приложените филтри. Първо, ще използваме намери или намерено метод за извличане на необходимите данни и по-късно използване на агрегирането метод. Тук ще напишем заявки както в заявката на обвивката на MongoDB, така и в кода на драйвера на Java.

Нека разгледаме различните начини за извличане на стойността в MongoDB чрез име на поле.

2. Инициализация на база данни

За да започнем, трябва да настроим нова база данни baeldung и нова колекция, пътуване :

use baeldung;
db.createCollection(travel);

Нека сега добавим някои фиктивни данни в колекцията с помощта на insertMany метод на 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]"
}
]);

Горното insertMany заявката ще върне следния JSON:

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

Досега вмъкнахме фиктивните данни в колекцията travel .

3. Използване на намери Метод

Находката метод намира и връща документи, които отговарят на посочените критерии за заявка в колекцията. Ако няколко документа отговарят на условието, тогава той ще върне всички документи въз основа на реда на документите на диска. Освен това в MongoDB намерете методът поддържа проекция на параметри в заявката. Ако посочим проекционен параметър в находката метод, той ще върне всички документи, съдържащи само проекционни полета.

Един ключов момент, който трябва да се отбележи, е, че _id полето винаги е включено в отговора, освен ако не е изрично премахнато.

За да демонстрираме, нека разгледаме заявката на обвивката за проектиране на ключово поле:

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

Отговорът на горната заявка ще бъде:

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

Тук, в тази заявка, ние просто проектирахме passengerId. Нека сега да разгледаме ключовото поле с изключение на _id :

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

Горната заявка ще има следния отговор:

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

Тук, в тази заявка, изключихме _id поле от проекцията на отговора. Нека видим кода на драйвера на Java за горната заявка:

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

В горния код първо създадохме MongoClient връзка с локалния монго сървър, работещ на порт 27017 . След това използвахме находката метод, който има два параметъра, queryFilter, и проекция. Заявката DBObject съдържа филтрите, чрез които трябва да извлечем данните. Тук отпечатахме всички проектирани полета от документи за пътуване с помощта на DBCursor .

4. Използване на агрегирането Метод

Агрегацията операции в MongoDB обработват записи с данни и документи и връщат изчислени резултати. Той събира стойности от различни документи и ги групира заедно, преди да извърши различни видове операции върху групираните данни, като сума, средна стойност, минимум, максимум и т.н.

Можем да използваме тръбопровода за агрегиране на MongoDB, когато трябва да направим по-сложно агрегиране. Тръбопроводите за агрегиране са колекции от етапи, комбинирани със синтаксис на заявка MongoDB, за да се получат обобщени резултати.

Нека разгледаме заявката за агрегиране, за да извлечем стойността по име на ключ:

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

Отговорът на горната заявка за агрегиране ще бъде:

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

В този случай използвахме $project етап на тръбопровода за агрегация. $project определя кои полета да се включат или изключат. В нашата заявка ние предадохме само пассажира в етапа на проекция.

Нека да разгледаме кода на драйвера на Java за горната заявка:

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

Можем също да напишем конвейера за агрегиране по следния начин:

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

Създадохме конвейер за агрегиране с кода на драйвера на java и настроихме етапа на проекта само да включва passengerId поле. Накрая предадохме конвейера за агрегиране към агрегата метод за извличане на данните.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongoexport, използващ $gt и $lt ограничения за период от време

  2. Как мога да изброя всички колекции в обвивката на MongoDB?

  3. Вграден MongoDB при изпълнение на интеграционни тестове

  4. Запазване на numpy масив в mongodb

  5. Mongodb Увеличете стойността вътре в вложен масив