Mongodb java get value

Java и MongoDB: базовые операции

MongoDB — одна из наиболее популярных документноориентированных систем управления баз данных с открытым исходным кодом.

Для использования MongoDB в Java-проектах потребуется синхронный или асинхронный драйвер. В этой статье я опишу работу с синхронным драйвером.

Настройка проекта

Для использования MongoDB в синхронном режиме потребуется только соответствующий драйвер:

Подключение к MongoDB

Самый простой подключения к MongoDB — использование MongoClients.create():

По умолчанию клиент попробует подключиться к локальной MongoDB на порте 27017. Если подключение установить не получится, то будет возбуждено исключение. В качестве аргументов методу create можно передать строку подключения к MongoDB и дополнительные настройки подключения.

MongoClient расширяет интерфейсы Closeable и AutoCloseable, соответственно, объект этого типа может быть помещён в блок try-with-resources.

Работа с базами данных

Драйвер MongoDB предоставляет полноценный API для работы с базами данны.

Получение списка баз данных

Получить список доступных баз данных и их имён можно методами MongoClient.listDatabases() и MongoClient.listDatabaseNames() соответственно:

Создание и получение базы данных

База данных может быть создана и получена при помощи метода MongoClient.get():

Пользователь должен иметь доступ к указанной базе данных, в противном случае будет возбуждено исключение.

Удаление базы данных

База данных может быть удалена при помощи метода MongoDatabase.drop():

В результате выполнения команды база вместе со всеми коллекциями будет удалена. Пользователь должен иметь права на удаление базы.

Работа с коллекциями

Коллекции в MongoDB аналогичны таблицам в РСУБД, но они не имеют схемы и могут содержать документы с абсолютно разной структурой. На практике же в одной коллекции содержатся документы либо одного типа, либо объекты классов, реализующих один супертип.

Получение списка коллекций

Списки коллекций и имён коллекций в текущей базе данных могут быть получены при помощи методов MongoDatabase.listCollections() и MongoDatabase.listCollectionNames() соответственно:

Создание и получение коллекции

Коллекция может быть создана и получена при помощи метода MongoDatabase.getCollection():

Также коллекция может быть создана при помощи метода MongoDatabase.createCollection().

Удаление коллекции

Коллекцию можно удалить при помощи вызова метода MongoCollection.drop():

Работа с индексами

MongoDB, как и реляционные системы управления базами данных, позволяет использовать индексы для ускорения поиска по коллекциям.

Читайте также:  Input select php mysql

Получение списка индесов

Список индексов можно получить вызовом метода MongoCollection.listIndexes():

Создание индекса

Индекс может быть создан при помощи метода MongoCollection.createIndex():

В качестве обязательного аргумента должен быть передан объект класса, реализующего интерфейс org.bson.BSON, в котором ключи — имена свойств коллекции, которые требуется индексировать, а значения — типы используемых индексов.

В качестве одного из дополнительных аргументов может быть передан объект типа IndexOptions, в котором можно указать дополнительные настройки индекса, например, его название.

В качестве примера приведено создание индекса по свойству dateCreated с сортировкой по возрастанию и названием idxDateCreated.

Также можно создать сразу несколько индексов при помощи метода MongoCollection.createIndexes().

Удаление индекса

Индекс может быть удалён в случае необходимости при помощи метода MongoCollection.dropIndex(). В качестве аргумента может быть передано название индекса или список индексируемых свойств.

Работа с документами

Данные в коллекциях MongoDB хранятся в виде документов. Формат хранения — BSON, или Binary JSON, очень похожий на стандартный JSON, но имеющий свои особенности. При работе с документами в Java по умолчанию используется класс org.bson.Document, реализующий Map из Collections API и представляющий документ в виде набора ключей и значений.

В настоящее время BSON выделен в отдельную библиотеку org.mongodb:bson, и его можно использовать без MongoDB. Его использование вместо стандартного JSON будет эффективнее, поскольку используется бинарная сериализация. Но при этом BSON менее эффективен, чем Protocol Buffers, поскольку имена свойств документа тоже участвуют в сериализации.

Создание документа

Для создания и сохранения документа в коллекции потребуется создать объект вышеупомянутого класса Document, добавить в него нужные пары ключей и значений и сохранить при помощи метода MongoCollection.insertOne() или MongoCollection.insertMany():

Обратите внимание, что по умолчанию в качестве первичного ключа в коллекциях MongoDB используется свойство _id, которое имеет тип ObjectId. Он, как и UUID, гарантирует уникальность и хранится в бинарном виде, однако более компактен (12 байт против 16). Если у документа не указано свойство _id, то MongoDB добавит его автоматически.

Поиск по документам

Для поиска по документам существует метод MongoCollection.find(). Он возвращает список документов и в качестве одного из аргументов может принимать документ, описывающий условия поиска. В качестве примера поиск по слову coffee в свойстве task:

Также есть дополнительные методы findOneAndUpdate, findOneAndReplace и findOneAndDelete, которые позволяют найти один документ и обновить, заменить и удалить его соответственно.

Изменение документов

Изменение документов в MongoDB реализовано при помощи методов
MongoCollection.updateOne() и MongoCollection.updateMany(). В качестве первого аргумента передаётся документ, описывающий условия выборки, а в качестве второго — документ, описывающий изменения, которые будут внесены в существующие документ(ы). Кроме изменения значений возможно добавление и удаление свойств. Например, в этом запросе значение свойства done заменяется на true, добавляется свойство dateDone и удаляется свойство dateCreated:

Обратите внимание, что если в качестве второго аргумента будет передан простой документ, то он полностью заменит документ. Для изменения отдельных свойств нужно пользоваться оператором $set.

Удаление документов

Для удаления документов используются методы MongoCollection.deleteOne() и MongoCollection.deleteMany(). В качестве аргумента передаётся документ, описывающий условия выборки. Если требуется удалить все документы в коллекции, то можно передать пустой документ.

Читайте также:  Blender with python tutorial

Полезные ссылки

Источник

Java MongoDB: запрос документа

В этом руководстве мы покажем вам несколько распространенных способов получить или запросить документ из коллекции.

Тестовые данные

Вставьте 5 фиктивных документов для тестирования.

  < "_id" : < "$oid" : "id">, "number" : 1 , "name" : "mkyong-1"> < "_id" : < "$oid" : "id">, "number" : 2 , "name" : "mkyong-2"> < "_id" : < "$oid" : "id">, "number" : 3 , "name" : "mkyong-3"> < "_id" : < "$oid" : "id">, "number" : 4 , "name" : "mkyong-4"> < "_id" : < "$oid" : "id">, "number" : 5 , "name" : "mkyong-5"> 

1. Find () примеры

1.1 Получить только первый соответствующий документ.

 DBObject doc = collection.findOne(); System.out.println(dbObject); 

1.2 Получить все совпадающие документы.

 DBCursor cursor = collection.find(); while(cursor.hasNext())
  < "_id" : < "$oid" : "id">, "number" : 1 , "name" : "mkyong-1"> < "_id" : < "$oid" : "id">, "number" : 2 , "name" : "mkyong-2"> < "_id" : < "$oid" : "id">, "number" : 3 , "name" : "mkyong-3"> < "_id" : < "$oid" : "id">, "number" : 4 , "name" : "mkyong-4"> < "_id" : < "$oid" : "id">, "number" : 5 , "name" : "mkyong-5"> 

1.3 Получить одно поле из соответствующего документа.

 BasicDBObject allQuery = new BasicDBObject(); BasicDBObject fields = new BasicDBObject(); fields.put("name", 1); DBCursor cursor = collection.find(allQuery, fields); while (cursor.hasNext())
  < "_id" : < "$oid" : "id">, "name" : "mkyong-1"> < "_id" : < "$oid" : "id">, "name" : "mkyong-2"> < "_id" : < "$oid" : "id">, "name" : "mkyong-3"> < "_id" : < "$oid" : "id">, "name" : "mkyong-4"> < "_id" : < "$oid" : "id">, "name" : "mkyong-5"> 

2. Найти () и сравнение

2.1 Получить все документы, где number = 5 ,

 BasicDBObject whereQuery = new BasicDBObject(); whereQuery.put("number", 5); DBCursor cursor = collection.find(whereQuery); while(cursor.hasNext())

2,2 $in пример — получить документы где number in 2, 4 and 5 ,

 BasicDBObject inQuery = new BasicDBObject(); List list = new ArrayList(); list.add(2); list.add(4); list.add(5); inQuery.put("number", new BasicDBObject("$in", list)); DBCursor cursor = collection.find(inQuery); while(cursor.hasNext())
  < "_id" : < "$oid" : "id">, "number" : 2 , "name" : "mkyong-2"> < "_id" : < "$oid" : "id">, "number" : 4 , "name" : "mkyong-4"> < "_id" : < "$oid" : "id">, "number" : 5 , "name" : "mkyong-5"> 

2,3 $gt $lt пример — получить документы где 5 > number > 2 ,

 BasicDBObject gtQuery = new BasicDBObject(); gtQuery.put("number", new BasicDBObject("$gt", 2).append("$lt", 5)); DBCursor cursor = collection.find(gtQuery); while(cursor.hasNext())
  < "_id" : < "$oid" : "id">, "number" : 3 , "name" : "mkyong-3"> < "_id" : < "$oid" : "id">, "number" : 4 , "name" : "mkyong-4"> 

2,4 $ne пример — получить документы где number != 4 ,

 BasicDBObject neQuery = new BasicDBObject(); neQuery.put("number", new BasicDBObject("$ne", 4)); DBCursor cursor = collection.find(neQuery); while(cursor.hasNext())
  < "_id" : < "$oid" : "id">, "number" : 1 , "name" : "mkyong-1"> < "_id" : < "$oid" : "id">, "number" : 2 , "name" : "mkyong-2"> < "_id" : < "$oid" : "id">, "number" : 3 , "name" : "mkyong-3"> < "_id" : < "$oid" : "id">, "number" : 5 , "name" : "mkyong-5"> 

3. найти () и логический

3,1 $and пример — получить документы где number = 2 and name = ‘mkyong-2’ ,

 BasicDBObject andQuery = new BasicDBObject(); List obj = new ArrayList(); obj.add(new BasicDBObject("number", 2)); obj.add(new BasicDBObject("name", "mkyong-2")); andQuery.put("$and", obj); System.out.println(andQuery.toString()); DBCursor cursor = collection.find(andQuery); while (cursor.hasNext())

4. найти () и регулярное выражение

Найти документ с шаблоном регулярного выражения.

Читайте также:  Надстрочные символы в html

4,1 $regex пример — получить документы где name like pattern ‘Mky.*-1’, case insensitive ,

 BasicDBObject regexQuery = new BasicDBObject(); regexQuery.put("name", new BasicDBObject("$regex", "Mky.*-1") .append("$options", "i")); System.out.println(regexQuery.toString()); DBCursor cursor = collection.find(regexQuery); while (cursor.hasNext())
 < "name" : < "$regex" : "Mky.*-3" , "$options" : "i">> < "_id" : < "$oid" : "515ad59e3004c89329c7b259">, "number" : 1 , "name" : "mkyong-1"> < "_id" : < "$oid" : "515ad59e3004c89329c7b25a">, "number" : 2 , "name" : "mkyong-2"> < "_id" : < "$oid" : "515ad59e3004c89329c7b25b">, "number" : 3 , "name" : "mkyong-3"> 

Есть еще …
Прочтите эту документацию оператора MongoDB для полного набора операторов запросов, поддерживаемых в MongoDB.

5. Полный пример

 package com.csharpcoderr.core; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.Calendar; import java.util.List; import com.mongodb.BasicDBObject; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.MongoException; /** * Java MongoDB : Query document * * @author mkyong * */ public class QueryApp < public static void insertDummyDocuments(DBCollection collection) < Listlist = new ArrayList(); Calendar cal = Calendar.getInstance(); for (int i = 1; i collection.insert(list); > public static void main(String[] args) < try < Mongo mongo = new Mongo("localhost", 27017); DB db = mongo.getDB("yourdb"); // получить одну коллекцию DBCollection collection = db.getCollection("dummyColl"); insertDummyDocuments(collection); System.out.println("1. Find first matched document"); DBObject dbObject = collection.findOne(); System.out.println(dbObject); System.out.println("n1. Find all matched documents"); DBCursor cursor = collection.find(); while (cursor.hasNext()) < System.out.println(cursor.next()); >System.out.println("n1. Get 'name' field only"); BasicDBObject allQuery = new BasicDBObject(); BasicDBObject fields = new BasicDBObject(); fields.put("name", 1); DBCursor cursor2 = collection.find(allQuery, fields); while (cursor2.hasNext()) < System.out.println(cursor2.next()); >System.out.println("n2. Find where number = 5"); BasicDBObject whereQuery = new BasicDBObject(); whereQuery.put("number", 5); DBCursor cursor3 = collection.find(whereQuery); while (cursor3.hasNext()) < System.out.println(cursor3.next()); >System.out.println("n2. Find where number in 2,4 and 5"); BasicDBObject inQuery = new BasicDBObject(); List list = new ArrayList(); list.add(2); list.add(4); list.add(5); inQuery.put("number", new BasicDBObject("$in", list)); DBCursor cursor4 = collection.find(inQuery); while (cursor4.hasNext()) < System.out.println(cursor4.next()); >System.out.println("n2. Find where 5 > number > 2"); BasicDBObject gtQuery = new BasicDBObject(); gtQuery.put("number", new BasicDBObject("$gt", 2).append("$lt", 5)); DBCursor cursor5 = collection.find(gtQuery); while (cursor5.hasNext()) < System.out.println(cursor5.next()); >System.out.println("n2. Find where number != 4"); BasicDBObject neQuery = new BasicDBObject(); neQuery.put("number", new BasicDBObject("$ne", 4)); DBCursor cursor6 = collection.find(neQuery); while (cursor6.hasNext()) < System.out.println(cursor6.next()); >System.out.println("n3. Find when number = 2 and name = 'mkyong-2' example"); BasicDBObject andQuery = new BasicDBObject(); List obj = new ArrayList(); obj.add(new BasicDBObject("number", 2)); obj.add(new BasicDBObject("name", "mkyong-2")); andQuery.put("$and", obj); System.out.println(andQuery.toString()); DBCursor cursor7 = collection.find(andQuery); while (cursor7.hasNext()) < System.out.println(cursor7.next()); >System.out.println("n4. Find where name = 'Mky.*-3', case sensitive example"); BasicDBObject regexQuery = new BasicDBObject(); regexQuery.put("name", new BasicDBObject("$regex", "Mky.*-2") .append("$options", "i")); System.out.println(regexQuery.toString()); DBCursor cursor8 = collection.find(regexQuery); while (cursor8.hasNext()) < System.out.println(cursor8.next()); >collection.drop(); System.out.println("Done"); > catch (UnknownHostException e) < e.printStackTrace(); >catch (MongoException e) < e.printStackTrace(); >> > 

Рекомендации

Источник

Оцените статью