Страницы

Показаны сообщения с ярлыком MongoDB. Показать все сообщения
Показаны сообщения с ярлыком MongoDB. Показать все сообщения

среда, 14 декабря 2016 г.

MongoDB Views

В конце ноября вышел релиз MongoDB 3.4, стало быть наконец настал тот час когда можно смело использовать новые фичи, конечно если ваши админы планируют обновлять MongoDB до этой версии. Сегодня хочу затестить еще одну вкусняшку по имени Views. Для примера возьмем запрос, о котором я подробно рассказывал в одном из предыдущих постов, и создадим на его основе вьюху. Выглядит Read-only View как коллекция, документы которой билдятся по aggregation запросу.

воскресенье, 6 ноября 2016 г.

MongoDB Linked List

На этой неделе появилась версия MongoDB 3.4.0 Release Candidate 2 с кучей вкусняшек на борту, которые хочется попробовать уже сейчас. Предлагаю провести дегустацию одного из самых вкусных блюд предстоящего релиза - пайпа по имени $graphLookup - с помощью которого можно выполнять поиск по коллекции рекурсивно. Напишем запрос к коллекции, документы которой имплементируют связный список. Реализация подобной структуры в текущем стабильном релизе на мой взгляд вообще не вариант, и я рад что уже совсем скоро смогу рассчитывать на нее в процессе проектирования.

воскресенье, 1 мая 2016 г.

Go Tail MongoDB

На днях написал простенький Go пакет по имени mgotail, предназначенный для получения свежих документов из MongoDB capped collections с помощью tailable cursors. Node.js модуль mongodb-tail справляется с этой задачей, но в силу своей природы не эффективен если использовать несколько процессорных ядер. Писать код на Go я начал совсем недавно, пока как говорится "верхушек нахватался", может быть поэтому решение на Go мне кажется и быстрее, и надежнее.

среда, 10 февраля 2016 г.

Node.js MongoDB Iterate Cursor

Три паттерна итерации по курсору MongoDB: первый - "классический" - на старых добрых функциях обратного вызова, второй - "на любителя" - на промисах, третий - "для извращенцев эстетов" - на промисах и генераторах с использованием co, второй и третий можно применять только со второй версией MongoDB Native NodeJS Driver и Node.js не меньше четвертой версии.

четверг, 10 декабря 2015 г.

MongoDB Many to Many

Всех, кто работает с MongoDB, поздравляю с релизом версии 3.2.0! Там столько вкусного, это просто праздник какой-то! Предлагаю провести дегустацию одной из самых вкусных, и наверняка самых ожидаемых, вкусняшек - оператора $lookup. Реализуем варианты запросов к коллекциям, которые находятся в отношениях "один ко многим" (left outer join) и "многие ко многим". По ходу используем еще один свежий оператор - $arrayElemAt, а также новые фичи оператора $unwind.

суббота, 3 октября 2015 г.

MongoDB Linked List

Небольшой этюд на тему связного списка в MongoDB. Приведенный ниже код на мой взгляд показывает, что использование этой структуры данных в MongoDB - не самая лучшая идея. Правда предложенный мной "альтернативный" вариант мне тоже не особенно нравится, но сегодня я просто не знаю "тру" решения.

воскресенье, 6 сентября 2015 г.

MongoDB && Elasticsearch Node.js package

Не знаю как в настоящий момент обстоят дела с поддержкой river plugins в Elasticsearch, а Node.js-модуль по имени mongodb-es-river уже готов оказать помощь в индексировании документов MongoDB в Elasticsearch, теперь с возможностью горизонтального масштабирования процесса "перетекания" данных. Далее расскажу как приготовить river-сервис на основе перечисленных выше ингредиентов.

четверг, 13 августа 2015 г.

MongoDB bitwise query operators

В MongoDB уже довольно давно существует оператор по имени $bit для выполнения битовых операций and | or | xor. И вот, как говорится не прошло и года, а на самом деле спустя четыре года, в версии 3.1.6 появилась возможность выполнять запросы по битовой маске. Я ждал эту фичу, предлагаю затестить:

пятница, 24 июля 2015 г.

Node.js. Scaling apps

Секрет создания больших приложений - не создавать большие приложения. В этом посте я хочу раскрыть рецепт приготовления масштабируемых приложений на архитектуре микросервисов на платформе Node.js с использованием MongoDB. Для примера приготовим какое-нибудь бесполезное веб-приложение. Особенность этого рецепта в том, что ничего кроме Node.js и MongoDB не потребуется.

воскресенье, 21 июня 2015 г.

MongoDB && Node.js && Elasticsearch

Продолжение темы предыдущего поста. Недолго музыка играла: разработчики эластика сообщили о том, что river-плагины устарели, и будут постепенно выводится из оборота, подробности можно узнать в этом посте на блоге эластика. Поэтому я начал потихоньку готовить свой велосипед в виде npm-пакета для Node.js. Разумеется на текущий момент, что называется not ready for production, тем не менее решает вопрос, что и демонстрирует следующее видео:

понедельник, 1 июня 2015 г.

MongoDB && Elasticsearch

Как подружить MongoDB и Elasticsearch с помощью MongoDB River Plugin for ElasticSearch. По ходу развернем MongoDB Replica Set, Elasticsearch Cluster, создадим пару коллекций с парой тестовых документов в каждой из них, пару индексов по одному на коллекцию, а также затестим что получилось путем отправки нескольких нехитрых запросов через cURL. В процессе используем ConEmu (у меня окна в качестве ОС), MongoDB Shell, Git SCM (Bash + cURL) и Python JSON tool (для читабельного вывода в консоль ответов на запросы в формате JSON).

воскресенье, 8 марта 2015 г.

MongoDB Set Operators

Пример работы с множествами в MongoDB. В качестве множеств используем массивы. Извлечение данных реализуем на Aggregation Pipeline, в частности с помощью выражений для работы с множествами. По ходу создадим структуру данных, имитирующую взаимоотношения между полами. Будет интересно.

среда, 19 ноября 2014 г.

Lightweight wrapper on MongoDB native Node.js driver

Модуль mongow - инструмент моделирования объектов MongoDB для Node.js разработчиков. С его помощью можно решать задачи, для которых Mongoose слишком много, а MongoDB native Node.js driver слишком мало. Для быстрого старта качаем архив, запускаем тестовое приложение и знакомимся с кодом.

четверг, 30 октября 2014 г.

Как получить длину массива документа MongoDB

В MongoDB нет "нативного" метода получения длины массива, только с помощью aggregation framework, стало быть эта нехитрая операция на самом деле не особенно "дешевая", что желательно принимать во внимание еще на этапе проектирования. В моем арсенале есть три способа решения этого вопроса.

воскресенье, 21 сентября 2014 г.

MongoDB ObjectId by date

Продолжение темы предыдущего поста - зачем мне все это? К примеру для того, чтобы вытащить документы коллекции MongoDB по дате создания. Возьмем коллекцию messages, созданную в одном из предыдущих постов. Отдельное поле, содержащее дату или timestamp отсутствует, однако дату создания документа можно получить по ObjectId.

воскресенье, 31 августа 2014 г.

MongoDB Tailable Cursors

В повседневной работе я нередко использую непереводимую игру слов с использованием местных идиоматических выражений. Как к примеру сказать по-русски "_id"? Я так и говорю: "underscore id". Сегодня расскажу про "tailable cursors" - курсоры, которые благодаря тому, что не закрываются сразу же после получения заключительной "порции" данных, отвечающих поисковому запросу, как это просходит с "обычными" курсорами, продолжают получать документы сразу же после их добавления в целевую коллекцию. Их можно применять только по отношению к "capped collections".

воскресенье, 20 июля 2014 г.

Node.js Singleton Sample App

Пример приложения на Node.js + Express + MongoDB Native Driver в продолжение темы предыдущего поста, которое можно рассматривать в качестве "заготовки" модели. Приложение использует общий конструктор моделей доступа к данным, в котором для примера реализован единственный метод для извлечения одного документа коллекции, кэш созданных объектов, а также кэш запросов к базе данных.

суббота, 19 июля 2014 г.

Node.js Singleton

Небольшой этюд на тему шаблона singleton в контексте модулей Node.js. Как известно Node.js кэширует модули после первой загрузки, однако с кэшированием экспортируемых модулем объектов возможны варианты, в частности в случае экспорта конструктора объекта. Изложение пошаговое, в картинках. Результат - мой вариант решения вопроса. Заодно рассмотрим вопрос экспорта подключения к MongoDB.

суббота, 26 апреля 2014 г.

Пишем простой чат на Node.js. Пятая серия

Продолжаем рассматривать варианты хранения данных приложения Node.js на примере создания простого чата на TCP-сокетах. Использовать реляционные базы данных в нашем случае по-моему перебор, поэтому настоящим постом завершаем. Напоследок рассмотрим применение Mongoose ODM (Object Data Mapping).