Начало работы с MongoDB

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

MongoDB (http://www.mongodb.com/) — это документ-ориентированная система управления базами данных. MongoDB поддерживает работу с подавляющим большинством современных языков программирования. В данной статье я рассмотрю работу с C#.

Для начала необходимо установить саму MongoDB. Загрузить последнюю версию для требуемой платформы можно по ссылке: https://www.mongodb.org/downloads. Процесс установки достаточно тривиальный и хорошо описан на официальном сайте MongoDB.

Рассмотрим основы работы в MongoDB из C#. Для этого создадим новое консольное приложение. Теперь необходимо добавить драйвер, позволяющий работать с MongoDB из C#, для этого необходимо воспользоваться NuGet, из которого установить «Official MongoDB C# drivers».

Теперь поставим задачу: пусть нам необходимо создать справочник пользователей, содержащий их имя и возраст. Для этого создадим новый класс User следующего содержания.

    public class User
    {
        public ObjectId Id { get; set; }
        public String Name { get; set; }
        public int Age { get; set; }
    }

Тип ObjectId можно найти в библиотеке MongoDB.Bson;

Теперь пришло время работать с базой данных. Убедитесь, что MongoDB запущена, по умолчания MongoDB запускается на 27017 порту, если вы используете другой порт, не забудьте отразить это в строке подключения.

Полный код программы будет следующим.

        private static void PrintMenu()
        {
            Console.WriteLine("p \t список всех пользователей");
            Console.WriteLine("a \t добавить пользователя");
            Console.WriteLine("r \t удалить пользователя");
            Console.WriteLine("m \t отобразить меню");
            Console.WriteLine("e \t выход\n");
        }

        static void Main()
        {
            const string connect = "mongodb://localhost";
            var client = new MongoClient(connect);

            var server = client.GetServer();
            var mongoDatabase = server.GetDatabase("Notebook");

            var collection = mongoDatabase.GetCollection<user>("Users");
            PrintMenu();
            Console.Write("Комманда: ");
            ConsoleKeyInfo c = Console.ReadKey();
            Console.WriteLine();
            while (true)
            {
                switch (c.Key)
                {
                    case ConsoleKey.P:
                        var users = collection.FindAll().ToList();
                        foreach (var user in users)
                        {
                            Console.WriteLine("Имя: {0}, Возраст: {1}", user.Name, user.Age);
                        }
                        break;
                    case ConsoleKey.A:
                        Console.WriteLine("Введите имя пользователя");
                        var addName = Console.ReadLine();
                        Console.WriteLine("Введите возраст");
                        var addAge = Int32.Parse(Console.ReadLine());
                        var newUser = new User { Age = addAge, Name = addName };
                        collection.Insert(newUser);
                        break;

                    case ConsoleKey.R:
                        Console.WriteLine("Введите имя пользователя для удаления\n");
                        var name = Console.ReadLine();
                        var query = Query<user>.EQ(x => x.Name, name);
                        var tempUser = collection.Find(query);
                        if (tempUser != null)
                        {
                            collection.Remove(query);
                        }
                        break;
                    case ConsoleKey.M: PrintMenu(); break;
                    case ConsoleKey.E: return; break;
                }
                Console.Write("Комманда: ");
                c = Console.ReadKey();
                Console.WriteLine();
            }

        }

Разберём подробнее

Строка const string connect = "mongodb://localhost"; задаёт необходимый адрес для подключения к базе данных.

var client = new MongoClient(connect);
var server = client.GetServer();
var mongoDatabase = server.GetDatabase("Notebook");

В данных строках происходит соединение с MongoDB и получение базы данных Notebook.

var collection = mongoDatabase.GetCollection<user>("Users");

Происходит получение коллекции Users, в которой будут храниться объекты типа User.

В дальнейшем, в зависимости от нажатия клавиш клавиатуры, выполняется одно из 5 действий:

  • P – вывод на экран списка всех пользователей;
  • A – добавление нового пользователя в базу данных;
  • R – удаление пользователя из базы данных;
  • M – отображение на экране меню с доступными командами;
  • E – выход из программы;
var users = collection.FindAll().ToList();
Получает список всех пользователей.
var newUser = new User { Age = addAge, Name = addName };
collection.Insert(newUser);
Создает нового пользователя(класс User) и добавляет его в базу данных.
var query = Query<user>.EQ(x => x.Name, name);
Создаёт запрос для поиска пользователя по имени.
collection.Remove(query);
Удаляет пользователей, соответствующих запросу.

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

Пример работы программы можно увидеть ниже.

Исходный код программы целиком можно скачать здесь: http://1drv.ms/1xkmzfJ

В дальнейшем я покажу более сложные и интересные примеры работы с MongoDB.

Приятного программирования.

Комментарии (1) -

Ссылка на исходники нерабочая

Добавить комментарий