В рамках чтения книги «MongoDB: The Definitive Guide» Кристины Ходороу и Майкла Диролфа я решил записать основные моменты из глав, чтобы лучше усвоить материал.
Возможно, это тоже будет кому-то полезно.
Вставлять
Вставка — это базовый метод добавления информации в MongoDB. Чтобы добавить документ в коллекцию, сделайте следующее: > db.foo.insert( { “bar” : “baz” } );
В таких ситуациях, когда необходимо добавить несколько документов, для более быстрой вставки целесообразно использовать так называемые пакетные вставки (групповые вставки).
> db.foo.insert( { “arr” : [ { a : 1 , b : 1 } , { a : 2 , b : 2 } ] } );
Грубо говоря, мы просто вставляем массив.
Удалять
Всю информацию из коллекции можно удалить так: > db.users.remove();
При этом не удаляется сама коллекция или какие-либо индексы из нее.
Вы можете удалить объект на основе некоторого параметра, например: > db.users.remove( { “name” : “Vasya” } );
Удаление — довольно быстрая операция, но если вы хотите очистить коллекцию, зачастую быстрее удалить саму коллекцию (удалить) и заново создать индексы.
> db.drop_collection( “bar” );
Обновлять
Самый простой тип обновления – полная замена совпадающих документов.
Был такой документ: }
"_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 } } );
Он находит документ с именем Джо и устанавливает возраст 25. Важно отметить, что если ключ возраста не существует, он будет создан.
Если вам нужно удалить ключ, есть модификатор $unset. > db.users.update( { name: ”joe” } , { $unset: { age : 1 } } );
Модификаторы массива
Вы можете добавить элемент в массив, используя $push. Допустим, у того же Джо все еще есть список его друзей, примерно такой: }
"_id" : ObjectId("4b2b9f67a1f631733d917a7a"),
"name" : "joe",
"age" : 18,
“friends”: [
{name: “john”},
{name: “helen”}
]
}
Мы хотели бы добавить Питера в список друзей.
> db.users.update( { name: “joe” } , { $push: { friends: { name: “peter” } } } );
Эта штука добавит Питера в конец списка друзей Джо.
Если есть $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” } } } );
Это приведет к удалению Джона из друзей
Модификаторы позиции массива
Существует 2 способа манипулирования значениями в массиве: по определенной позиции или с помощью позиционного оператора (символ $).
Например, в списке друзей Джо хранятся не только имена их друзей, но и их возраст, и мы хотим увеличить возраст друга с индексом 0 на 3 года: > db.users.update( { name: “joe” } , { $inc: { “friends.0.age” : 3 } } );
Если мы хотим увеличить возраст конкретного друга, например, Джона, но не знаем, какой у него индекс в массиве, мы делаем так: > db.users.update( { “friends.name”: “john” } , { $inc: { “friends.$.
age” : 3 } } );
Upserts
Upsert — это особый тип обновления.При его использовании, если документ по запрошенному критерию не найден, он будет создан, но если найден, то обновится как обычно.
Чтобы использовать upsert, вам просто нужно добавить третий параметр, равный true, к команде обновления, например: > db.users.update( { name: “helen” } , { $set: { age: 23 } } , true );
Если в нашей коллекции нет документа с именем «helen», то он будет создан вместе с полем age: 23.
Множественное обновление
Все предыдущие примеры с использованием команды обновления находили первый документ и обновляли его.
Чтобы выполнить несколько обновлений, вам необходимо добавить четвертый параметр для обновления со значением true: > db.users.update( { age: 18 } , { $inc: { age: 1 } } , false, true );
Этот запрос найдет всех, кому исполнилось 18 лет, и увеличит его на 1.
В общем, это все.
Это не все модификаторы, только основные.
Будет время, будет продолжение.
Теги: #NoSQL #mongodb #mongodb
-
Почему Сова, Эффективный Менеджер, Права...
19 Oct, 24 -
Астериск С 1.8 На 16
19 Oct, 24 -
Коворкинг – Новый Способ Выращивания Пчел
19 Oct, 24