MongoDB + Java.
В этой статье хотелось бы кратко описать работу MongoDB + Java и расмотреть основные операции CRUD. Прежде всего установим MongoDB для этого идем на официальный сайт и скачиваем дистрибутив, у меня ОС winXP 32 - к ней подходит дистрибутив mongodb-win32-i386-2.0.8, скачайте правильно дистрибутив, ибо под разные версии ОС (xp - mongodb-win32-i386-2.0.XXX, win7 - mongodb-win32-i386-2.2.XXX) идут разные дистрибутивы MongoDB. Под winXP мне пришлось скачать старую версию дистрибутива. Создайте папку на с:\data\db - там по умолчанию MongoDB будет хранить все файлы баз данных,
распакуйте архив, перейдите в папку c:\mongodb-win32-i386-2.0.8\bin. Наберите в командной строчке start mongod.exe и запустите, после выполнения команды у вас в окне должна последней строчкой появиться такая надпись:
... Tue Feb 12 21:17:51 [initandlisten] waiting for connections on port 27017
MongoDB запушена и ждет подключения к порту 27017. Запустим клиет наберем команду start mongo.exe --host localhost, по умолчанию при подключени к MongoDB не нужно указывать ни пользователя, ни пароля. У вас на экране должны появиться строчки:
MongoDB shell version: 2.0.8 connecting to: localhost:27017/test >
Подключаемся по умолчанию к БД test. В MongoDB основной рабочей лошадкой является
коллекция которая содержит документы, документы представляют собой пары ключ-значения в формате JSON. По умолчанию базы данных и коллекции создаются при вставке первого документа. В MongoDB структуру документов не нужно определять заранее, как делается в реляционных СУБД во время разработки (create table, alter ...), мета-данные создаются во время выполнения команд вставки и изменения. Переключимся на БД vit и вставим документ в коллекцию persons - этот документ содержит одну пару ключ значение для хранения имени - {name:'vit'} введем данные:
MongoDB shell version: 2.0.8 connecting to: test > use vit switched to db vit > db.persons.insert({name:'vit'})
выведем только что вставленый документ командой find:
> db.persons.find() { "_id" : ObjectId("511bdbf296970d429769f39e"), "name" : "vit" }
В распечатке консоли вы можете видеть новое поле _id, его можно считать первичным ключом документа. В любом документе MongoDB должно присутствовать поле _id которое гарантированно будет уникальным среди всех значений _id в данной коллекции. Если _id не задано в момент создания документа, то MongoDB генирирует его за вас. Вставим новый документ задав _id вручную:
> db.persons.insert({_id:ObjectId("012345678901234567890123"),telHome:515595})
выведем данные на экран:
> db.persons.find() { "_id" : ObjectId("511bdbf296970d429769f39e"), "name" : "vit" } { "_id" : ObjectId("012345678901234567890123"), "telHome" : 515595 }
Усложним немного наш пример введем понятие селектор запроса - условие поиска документа. Селектор представляет собой пару-ключ значение допустим найдем документ который содержит в поле name - значение vit:
> db.persons.find({name:"vit"}) { "_id" : ObjectId("511bdbf296970d429769f39e"), "name" : "vit" } >
не всегда нам нужно возвращать множество полей, ограничить их можно в виде возвращаемого набора полей:
> db.persons.find({},{name:1}) { "_id" : ObjectId("511bdbf296970d429769f39e"), "name" : "vit" } { "_id" : ObjectId("012345678901234567890123") }
Этот запрос возвращает только два поля из документа - _id и name, _id - всегда включено по умолчанию. Иногда нам нужно исключить набор возвращаемых полей из набора:
> db.persons.find({},{name:0}) { "_id" : ObjectId("511bdbf296970d429769f39e") } { "_id" : ObjectId("012345678901234567890123"), "telHome" : 515595 }
и так попробуем изменить документ
> db.persons.update({telHome:515595},{$set: {name:"Joy"}}) > db.persons.find() { "_id" : ObjectId("511bdbf296970d429769f39e"), "name" : "vit" } { "_id" : ObjectId("012345678901234567890123"), "name" : "Joy", "telHome" : 515595 }
и удалим документ
> db.persons.remove({name:"vit"}) > db.persons.find() { "_id" : ObjectId("012345678901234567890123"), "name" : "Joy", "telHome" : 515595 }
еще последние две важные команды: выводит какие БД у нас есть
> show dbs local 0.03125GB test 0.03125GB tutorial 0.0625GB vit 0.03125GB
выводит имена коллекций в текущей БД
> show collections persons system.indexes
и еще одна важная команда - завершение работы сервера MongoDB, сначала нужно перейти в БД admin и потом вызвать команду db.shutdownServer():
> use admin switched to db admin > db.shutdownServer() Fri Feb 15 22:38:04 DBClientCursor::init call() failed Fri Feb 15 22:38:04 query failed : admin.$cmd { shutdown: 1.0 } to: 127.0.0.1 server should be down... Fri Feb 15 22:38:04 trying reconnect to 127.0.0.1 Fri Feb 15 22:38:05 reconnect 127.0.0.1 failed couldn't connect to server 127 0.1 Fri Feb 15 22:38:05 Error: error doing query: unknown shell/collection.js:151
И так переходим к программированию на Java, для доступа к MongoDB нужно подключить
"драйвер" в maven я делаю так:
<dependency> <groupId>org.mongodb</groupId> <artifactId>mongo-java-driver</artifactId> <version>2.9.1</version> </dependency>
и так смотрим коментарии в коде:
package com.vit; import com.mongodb.*; import java.net.UnknownHostException; import java.util.List; import java.util.Set; public class MainDb { private final String dbName = "vit"; private final String collectionName = "persons"; public static void main(String[] args) { new MainDb(); } public MainDb() { Mongo mongo = null; try { //и так подключимся к MongoDB host port mongo = new Mongo("localhost", 27017); } catch (UnknownHostException e) { e.printStackTrace(); throw new RuntimeException(e); } try { //получим все имена баз данных Listdatabases = mongo.getDatabaseNames(); System.out.println("Databases MongoDB:"); for (String database : databases) System.out.println(database); //подключимся к БД vit DB db = mongo.getDB(dbName); System.out.println("\nCollections DB " + dbName + " MongoDB:"); //запросим все коллекции в БД vit Set collections = db.getCollectionNames(); for (String collection : collections) System.out.println(collection); DBCollection collection = db.getCollection(collectionName); //выведем все записи из коллекции DBCursor cursor; cursor = collection.find(); PrintCursor(cursor); //вставка документа System.out.println("after Insert into MongoDB"); BasicDBObject doc = new BasicDBObject(); doc.put("name", "Vit"); doc.put("telHome", 522318); collection.insert(doc); //выведем все записи из коллекции cursor = collection.find(); PrintCursor(cursor); System.out.println("print Document with selector MongoDB"); //выведем по условию поиска - "селектора" {"name","Joy"} из коллекции cursor = collection.find( new BasicDBObject().append("name","Joy") , new BasicDBObject().append("name",1)); PrintCursor(cursor); //изменение документа System.out.println("after update document MongoDB"); doc = new BasicDBObject(); doc.put("name", "Vit"); doc.put("telHome", 522318); BasicDBObject doc1 = new BasicDBObject(); doc1.put("$set",new BasicDBObject("name","Tom")); collection.update(doc, doc1, false, true); //выведем запись cursor = collection.find(); PrintCursor(cursor); //удаление документа System.out.println("after delete document MongoDB"); doc = new BasicDBObject(); doc.put("name","Tom"); doc.put("telHome", 522318); collection.remove(doc); //выведем все записи из коллекции cursor = collection.find(); PrintCursor(cursor); } finally { // закрываем соединение с БД MongoDB if (mongo != null) mongo.close(); } } /** * распечатываем документы возвращаемые курсором * * @param cursor */ private void PrintCursor(DBCursor cursor) { DBObject doc; StringBuilder temp; while (cursor.hasNext()) { doc = cursor.next(); temp = new StringBuilder(); temp.append("{"); for (String keyName : doc.keySet()) temp.append(keyName + ":" + doc.get(keyName) + ", "); int i = temp.lastIndexOf(","); System.out.println( temp.replace(i, i + ", ".length(), "}").toString()); } } }
Комментариев нет:
Отправить комментарий