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 {
//получим все имена баз данных
List databases = 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());
}
}
}
Комментариев нет:
Отправить комментарий