mongodb

db.users.save( { id: "1", name: "Eugene" } ) Создание коллекции и объекта в ней

db.users.find() вывод содержимого коллекции

use info установить нужную нам базу данных в качестве текущей

show dbs вывести названия всех имеющихся бд

db узнать, какая бд используется в текущей момент

show collections просмотреть список всех коллекций в текущей бд

Получение статистики

db.stats() получить статистику по текущей базе данных

db.users.stats() узнаем статистику по коллекции

Добавление данных и создание коллекций

db.users.insert ({«name»: «Tom», «age»: 28, languages: [«english», «spanish»]})

db.users.renameCollection(«новое_название») Переименование коллекции

db.createCollection(name, options) Явное создание коллекции

Выборка из БД

db.users.insert({«name»: «Tom», «age»: 28, languages: [«english», «spanish»]})

db.users.find({name: «Tom»}) Выведем все документы, в которых name=Tom:

db.users.find({languages: «german»}) все документы, у которых в массиве languages есть german

db.users.find({name: «Tom», age: 32}) объекты, у которых name=Tom и одновременно age=32

db.users.find({name: «Tom»}, {age: 1}) Выведем только порцию информации, например, значения полей «age» у все документов, в которых name=Tom

db.persons.find({name: «Tom»}, {age: 0}) все параметры документа, кроме свойства age.

db.users.find({name: «Tom»}, {age: true, _id: false}) Альтернативно вместо 1 и 0 можно использовать true и false

Запрос к вложенным объектам

db.users.insert({«name»: «Alex», «age»: 28, company: {«name»:»microsoft», «country»:»USA»}}) добавим в коллекцию persons следующий документ

db.users.find({«company.name»: «microsoft»}) все документы, у которых в ключе company вложенное свойство name=microsoft

Настройка запросов и сортировка

db.users.find().limit(3) ограничим выборку тремя документами

db.users.find().skip(3) пропустим первые три записи

db.users.find().sort({name: 1}) сортировать: по возрастанию (1) или по убыванию (-1)

db.users.find().sort({name: 1}).skip(3).limit(3) можем совмещать все эти функции в одной цепочке

db.users.find().sort({ $natural: -1 }).limit(5)

$natural — позволяет задать сортировку: документы передаются в том порядке, в каком они были добавлены в коллекцию, либо в обратном порядке

Оператор $slice

$slice является в некотором роде комбинацией функций limit и skip. Но в отличие от них $slice может работать с массивами.

Курсоры

 var cursor = db.users.find(); null; Чтобы получить курсор и сразу же не выводить все содержащиеся в нем данные, после метода find() добавляет через точку с запятой выражение null;

 > var cursor = db.users.find();null;

> while(cursor.hasNext()){

… obj = cursor.next();

… print(obj[«name»]);

… }  

Курсоры инкапсулируют в себе наборы получаемых из бд объектов. Используя синтаксис языка javascript и методы курсоров, мы можем вывести полученные документы на экран и как-то их обработать.

 > var cursor = db.users.find()

> cursor.forEach(function(obj){

… print(obj.name);

… }) можем использовать конструкцию итератора javascript — forEach:

> cursor.limit(5);null; Чтобы ограничить размер выборки, используется метод limit

> cursor.sort({name:1});null; Используя метод sort(), можно отсортировать документы в курсоре:

 cursor.skip(2);null; метод skip() позволяет пропустит при выборке определенное количество документов

 > cursor.sort({name:1}).limit(3).skip(2);null;   можно объединять все эти методы в цепочки:

Команды группировки

db.users.count() число элементов в коллекции

db.users.find({name: «Tom»}).count() сколько определенных документов

db.users.distinct(«name»)

Группировка и метод group

аналогично применению выражения GROUP BY в SQL

Использование метода group аналогично применению выражения GROUP BY в SQL. Метод group принимает три параметра:

key: указывает на ключ, по которому надо проводить группировку

initial: представляет базовое значение для сгруппированного результата

reduce: представляет функцию, возвращающую количество элементов. Эта функция принимает в качестве аргументов два параметра: items и prev

keyf: необязательный параметр. Используется вместо параметра key и представляет функцию, которая возвращает объект key

cond: необязательный параметр. Представляет собой условие, которое должно возвращать true, иначе документ не примет участия в группировке. Если данный параметр неуказан, то в группировке участвуют все документы

finalize: необязательный параметр. Представляет функцию, которая срабатывает перед тем, как будут возвращены результаты группировки.

db.users.group ({key: {name : true}, initial: {total : 0},

reduce : function (items,prev){prev.total += 1}})

 metanit подробнее про группировки по ссылке

Условные операторы в MongoDB

$gt (больше чем)

$lt (меньше чем)

$gte (больше или равно)

$lte (меньше или равно)

$ne, который извлекает все документы, не соответствующие некоторому условию

db.users.find ({age: {$in : [22, 32]}}) $in определяет массив возможных выражений

db.users.find ({age: {$in : [22, 32]}}) $nin — он определяет массив возможных выражений и ищет те ключи, значение которых отсутствует в этом массиве:

db.users.find ({age: {$all : [22, 32]}})

db.users.find ({languages: {$all : [«english», «french»]}})

$all — требует, чтобы документы имели весь определяемый набор выражений

db.users.find ({$or : [{name: «Tom»}, {age: 22}]})

db.users.find ({name: «Tom», $or : [{age: 22}, {languages: «german»}]})

$or определяет набор пар ключ-значение, которые должны иметься в документе

либо name=Tom, либо age=22

в которых name=Tom, а age равно либо 22, либо среди значений languages есть «german»:

 db.users.find ({languages: {$size:2}}) документов, в которых массивы имеют число элементов, равным значению $size

 db.users.find ({company: {$exists:true}}) $exists — только те документы, в которых определенный ключ присутствует или отсутствует

 db.users.find ({name: {$regex:»b»}}) $regex задает регулярное выражение, которому должно соответствовать значение поля

Обновление данных

db.users.save({name: «Eugene», age : 29, languages: [«english», «german», «spanish»]})

db.users.update({name : "Tom"}, {name: "Tom", age : 25, married : false}, {upsert: true})

Обновление отдельного поля

db.users.update({name : "Eugene", age: 29}, {$set: {age : 30}})

Указав значение multi:true, мы можем обновить все документы выборки:

db.users.update({name : "Tom"}, {$set: {name: "Tom", age : 25, married : false}}, {multi:true})

Удаление данных

 db.users.remove({name : «Tom»}) Для удаления документов в MongoDB предусмотрен метод remove

 > db.users.remove({name : /T\w+/i})

> db.users.remove({age: {$lt : 30}}) как и в случае с find, мы можем задавать условия выборки для удаления различными способами (в виде регулярных выражений, в виде условных конструкций и т.д.)

 > db.users.remove({name : «Tom»}, true) второй необязательный параметр булевого типа, который указывает, надо удалять один элемент или все элементы, соответствующие условию. Если этот параметр равен true, то удаляется только один элемент. По умолчанию он равен false:

 db.users.remove({}) удалить разом все документы из коллекции

 db.users.drop() Для удаления коллекций используется функция drop

 db.dropDatabase() Чтобы удалить всю базу данных

Признаки "плохого кода"

Кратко рассмотрим 12 признаков, когда код можно улучшить: 1. Duplicated Code  — иногда повторяющийся код не всегда несет в себе пользу. Выде...