В рамках чтения мной книги “MongoDB: The Definitive Guide” Kristina Chodorow and Michael Dirolf, решил выписывать основные моменты из глав, для лучшего освоения материала. Возможно, кому-то это тоже будет полезно.
Insert — базовый метод для добавление информации в MongoDB. Для того, чтоб добавить документ в коллекцию делаем вот так:
В таких ситуациях, когда нужно добавить несколько документов, для более быстрой вставки желательно использовать, так называемые, batch insert’ы (групповая вставка)
Грубо говоря, просто вставляем массив.
Всю информацию из коллекции можно удалить вот так:
Это не удаляет саму коллекцию или любые индексы из неё.
Удалить объект по какому то параметру можно вот так:
Удаление достаточно быстрая операция, но если вы хотите очистить коллекцию, зачастую, будет быстрее удалить саму коллекцию (drop) и пересоздать индексы.
Простейший тип update’а это полная замена совпавших документов. Был вот такой документ:
Если мы сделаем вот так, то заменится весь документ:
т.е. будет
После этого запроса обновится только первый найденный документ, о мультиапдейте чуть ниже.
Если мы хотим выполнить инкремент какого то поля, то используем модификатор $inc. Чтоб увеличить возраст на 2 года делаем так:
Если нужно установить значение какого то ключа используем модификатор $set
Он находит документ, где имя joe и устанавливает age в 25. Важно, что если ключа age нет, то он будет создан.
Если нужно удалить ключ существует модификатор $unset
Добавить элемент в массив можно с помощью $push. Допустим у этого же joe ещё хранится список его друзей, как-то так:
Хотим добавить к друзьям ещё peter’a
Такая штука добавит peter’a в конец массива друзей joe.
Если есть $push, значит должен быть и $pop:
Это удалит элемент массива из конца, а вот это из начала
Также есть полезная вещь $addToSet — работает по аналогии с $push, но с проверкой на уникальность.
Иногда нужно удалить элемент массива по какому то критерию, тогда используется модификатор $pull:
Это удалит из друзей john’a
Существует 2 способа манипуляции со значениями в массиве: по конкретной позиции или с помощью использования позиционного оператора (символ $).
Например, в списке друзей joe хранятся не только их имена друзей, но и их возраст, и мы хотим увеличить возраст друга под индексом 0 на 3 года:
Если же мы хотим увеличить возраст конкретного друга, например, john’a, но мы не знаем под каким индексом он лежит в массиве, мы делаем вот так:
Upsert — это особый тип update’a. При его использовании, если документ по запрашиваему критерию не найден, то он будет создан, если же найден, то он будет обновлён, как обычно. Чтоб использовать upsert нужно просто в команде update добавить третий параметр равный true, вот так:
Если в нашей коллекции нет документа c именем “helen”, то он будет создан вместе с полем age: 23.
Все предыдущие примеры с использованием команды update находили первый документ и обновляли его. Для того, чтоб выполнить множественное обновление нужно добавить в update четвертый параметр со значением true:
Этот запрос найдёт всех, у кого возраст 18 лет и увеличит его на 1.
Вообщем на этом всё. Это не все модификаторы, только основные.
Будет время, будет продолжение.
Insert
Insert — базовый метод для добавление информации в MongoDB. Для того, чтоб добавить документ в коллекцию делаем вот так:
> db.foo.insert( { “bar” : “baz” } );
В таких ситуациях, когда нужно добавить несколько документов, для более быстрой вставки желательно использовать, так называемые, batch insert’ы (групповая вставка)
> db.foo.insert( { “arr” : [ { a : 1 , b : 1 } , { a : 2 , b : 2 } ] } );
Грубо говоря, просто вставляем массив.
Remove
Всю информацию из коллекции можно удалить вот так:
> db.users.remove();
Это не удаляет саму коллекцию или любые индексы из неё.
Удалить объект по какому то параметру можно вот так:
> db.users.remove( { “name” : “Vasya” } );
Удаление достаточно быстрая операция, но если вы хотите очистить коллекцию, зачастую, будет быстрее удалить саму коллекцию (drop) и пересоздать индексы.
> db.drop_collection( “bar” );
Update
Простейший тип update’а это полная замена совпавших документов. Был вот такой документ:
}
"_id" : ObjectId("4b2b9f67a1f631733d917a7a"),
"name" : "joe",
"age" : 18
}
Если мы сделаем вот так, то заменится весь документ:
> db.users.update( { “name” : ”joe” } , { “name” : “vasya” } );
т.е. будет
}
"_id" : ObjectId("4b2b9f67a1f631733d917a7a"),
"name" : "vasya"
}
После этого запроса обновится только первый найденный документ, о мультиапдейте чуть ниже.
Модификаторы
Если мы хотим выполнить инкремент какого то поля, то используем модификатор $inc. Чтоб увеличить возраст на 2 года делаем так:
> db.users.update( { name: “joe” } , { $inc : { age: 2 } } );
Если нужно установить значение какого то ключа используем модификатор $set
> db.users.update( { name:”joe” } , { $set: { age: 25 } } );
Он находит документ, где имя joe и устанавливает age в 25. Важно, что если ключа age нет, то он будет создан.
Если нужно удалить ключ существует модификатор $unset
> db.users.update( { name: ”joe” } , { $unset: { age : 1 } } );
Модификаторы массивов
Добавить элемент в массив можно с помощью $push. Допустим у этого же joe ещё хранится список его друзей, как-то так:
}
"_id" : ObjectId("4b2b9f67a1f631733d917a7a"),
"name" : "joe",
"age" : 18,
“friends”: [
{name: “john”},
{name: “helen”}
]
}
Хотим добавить к друзьям ещё peter’a
> db.users.update( { name: “joe” } , { $push: { friends: { name: “peter” } } } );
Такая штука добавит peter’a в конец массива друзей joe.
Если есть $push, значит должен быть и $pop:
> db.users.update( { name: ”joe” } , { $pop: { friends: 1 } } );
Это удалит элемент массива из конца, а вот это из начала
> db.users.update( { name: ”joe” }, { $pop: { friends: -1 } } );
Также есть полезная вещь $addToSet — работает по аналогии с $push, но с проверкой на уникальность.
Иногда нужно удалить элемент массива по какому то критерию, тогда используется модификатор $pull:
> db.users.update( { }, { $pull: { friends: { name: “john” } } } );
Это удалит из друзей john’a
Позиционные модификаторы массивов
Существует 2 способа манипуляции со значениями в массиве: по конкретной позиции или с помощью использования позиционного оператора (символ $).
Например, в списке друзей joe хранятся не только их имена друзей, но и их возраст, и мы хотим увеличить возраст друга под индексом 0 на 3 года:
> db.users.update( { name: “joe” } , { $inc: { “friends.0.age” : 3 } } );
Если же мы хотим увеличить возраст конкретного друга, например, john’a, но мы не знаем под каким индексом он лежит в массиве, мы делаем вот так:
> db.users.update( { “friends.name”: “john” } , { $inc: { “friends.$.age” : 3 } } );
Upserts
Upsert — это особый тип update’a. При его использовании, если документ по запрашиваему критерию не найден, то он будет создан, если же найден, то он будет обновлён, как обычно. Чтоб использовать upsert нужно просто в команде update добавить третий параметр равный true, вот так:
> db.users.update( { name: “helen” } , { $set: { age: 23 } } , true );
Если в нашей коллекции нет документа c именем “helen”, то он будет создан вместе с полем age: 23.
Multiple Update
Все предыдущие примеры с использованием команды update находили первый документ и обновляли его. Для того, чтоб выполнить множественное обновление нужно добавить в update четвертый параметр со значением true:
> db.users.update( { age: 18 } , { $inc: { age: 1 } } , false, true );
Этот запрос найдёт всех, у кого возраст 18 лет и увеличит его на 1.
Вообщем на этом всё. Это не все модификаторы, только основные.
Будет время, будет продолжение.