Як обробити вдосконалену обробку даних за допомогою програми агрегування MongoDB

MongoDB пройшов довгий шлях. Незважаючи на те, що там багато баз даних NoSQL, MongoDB - це перша база даних, яка спадає на думку, коли говорять про бази даних NoSQL.

Хоча між людьми, які люблять SQL, і людьми, які віддають перевагу NoSQL, завжди було трохи жару, правда, бази даних, такі як MongoDB, вирішують іншу проблему.

І вони можуть бути дуже зручними при передачі неструктурованих даних, коли маніпулювання формою даних швидко та ефективно (і перетворення їх у відповідні знання) є більш корисним, ніж тверда продуктивність, що забезпечується базами даних старої школи SQL.

MongoDB постачається з потужним фреймворком для цього - тобто маніпулюванням даними прямо на сервері: Aggregation Framework. Давайте розглянемо його та розглянемо короткі моменти щодо цього, що це таке, і чому це важливо.

Що таке структура агрегування?

Структура агрегації - це лише спосіб запитувати документи в колекції в MongoDB. Цей фреймворк існує, тому що коли ви починаєте працювати з даними та маніпулювати ними, вам часто доводиться хрустіти колекції разом, модифікувати їх, виривати поля, перейменовувати поля, об'єднувати їх, групувати документи за полем, вибухувати масив полів у різних документах тощо. .

Цього не може зробити традиційна система запитів, з якою постачається MongoDB (тобто запит пошуку або запит оновлення, або будь-який інший запит, який ви могли використовувати).

Простий запит, встановлений у MongoDB, дозволяє отримати лише повні або окремі документи. Вони насправді не дозволяють вам маніпулювати документами на сервері, а потім повертати їх у свою програму.

Тут виникає фреймворк агрегування від MongoDB. Це нічого зовнішнього, оскільки агрегування надходить у MongoDB. Ви можете навчитися працювати з системою агрегування MongoDB, використовуючи цей безкоштовний список відтворення YouTube, який я створив.

Трубопровід

Структура агрегації спирається на концепцію трубопроводу. Давайте подивимося зображення, яке пояснює це кращим чином:

Тут, як бачите, ми збираємо колекцію та передаємо її по трубопроводу. Цей конвеєр складається з певних етапів, коли певні оператори змінюють документи в колекції, використовуючи різні методи. Нарешті, результат повертається до програми, що викликає запит.

Порівняйте його з простим запитом, наприклад, знайти. Звичайно, це працює в більшості випадків, але насправді це не дуже корисно, коли ви хочете змінити дані, а також отримуючи їх.

Або вам потрібно буде отримати документи та відповідно їх змінити в додатку на сервері, або ще гірше - ви надішлете їх клієнту і дозволите коду інтерфейсу змінити його для вас.

В обох випадках ви витрачаєте ресурси і пропускну здатність. Таким чином, система агрегування акуратно вирішує цю проблему. Давайте подивимося, як це відбувається з операторами.

Оператори трубопроводів

У MongoDB конвеєр - це масив, що складається з різних операторів, які беруть купу документів і виплювають модифіковані документи згідно з правилами, визначеними програмістом. Наступний оператор бере документи, виплюнуті попереднім оператором, отже, це називається конвеєром.

Ви можете мати багато операторів у конвеєрі, і ці оператори також можна повторити, на відміну від звичайних запитів MongoDB.

Давайте поглянемо на деякі типові оператори конвеєрів у MongoDB.

$ група

Цей оператор дозволяє згрупувати купу документів разом на основі певного поля в документах. Також його можна використовувати для групування різних полів у документах.

Я дуже вірю в приказку, що фотографія коштує 1000 слів. Відео коштує 1000 зображень (ну, технічно набагато більше фотографій, але добре), тож давайте подивимось коротке відео про це:

$ збіг

Оператор конвеєра збігів працює дуже подібно до того, як працює звичайний оператор пошуку. Однак хороша річ у цьому полягає в тому, що його можна використовувати кілька разів, оскільки ви перебуваєте в конвеєрному середовищі! Це робить його потужним.

Давайте подивимося, як він використовується в колекції:

ліміт у $

Оператор конвеєра $ skip пропускає перші N документів, а решту документів передає наступному оператору. Подивимось короткий приклад:

$ пропустити

Оператор конвеєра $ skip пропускає перші N документів і передає решту документів наступному оператору. Подивимось короткий приклад:

$ розмотати

Цей оператор особисто мій улюблений. $ Unind приймає поле масиву та розкладає його на декілька N піддокументів разом із i-м документом, що містить i-те конкретне значення масиву як значення імені поля.

У поєднанні з іншими операторами, такими як $ group і $ match, це стає дуже потужним для обробки даних. Звучить заплутано? Давайте розглянемо простий приклад:

$ проект

Оператор проекту дозволяє вирвати купу полів з кожного документа, а решту відкинути. Мало того, ви також можете перейменовувати зірвані поля, рядки concat, виймати підрядки та багато іншого!

Давайте подивимося, як це працює в двох словах:

Найкращі практики використання системи агрегування

З великою силою приходить велика відповідальність. Ви також можете легко використовувати структуру агрегування для виконання простих запитів, тому важливо переконатися, що ви не пишете поганих запитів до бази даних.

Для початку майте на увазі наступні моменти:

  1. MongoDB відхилить будь-якого оператора, який займає більше 100 Мб оперативної пам'яті, і видасть помилку. Тож переконайтеся, що ви скоротили дані якомога швидше, оскільки один оператор не повинен займати більше 100 Мб пам’яті.
  2. Порядок має значення! Якщо поставити $ match першим, це зменшить кількість документів, переданих до решти конвеєру. Поміщення $ project наступним потім ще більше зменшить розмір окремого документа, позбувшись полів.
  3. Нарешті, переконайтеся, що ви робите всю роботу, яка вимагає використання індексованих полів (сортування, узгодження тощо), перш ніж використовувати оператори, такі як $ project або $ unind. Це тому, що ці оператори створюють нові документи, які не мають індексів вихідного документа.

Висновок

MongoDB - чудовий інструмент баз даних і може бути дійсно корисним для невеликих стартапів та підприємств, які хочуть швидко виконати ітерацію. Частково це пов’язано з його вільними обмеженнями та прощаючим характером.

Я сам використовую MongoDB на codedamn - платформі для таких розробників, як ви, де всі вчаться та підключаються!

Мир!