Налаштування MongoDB для мобільного додатку

TRUETECH займається розробкою, підтримкою та обслуговуванням мобільних додатків iOS, Android, PWA. Маємо великий досвід та експертизу для публікації мобільних додатків до популярних маркетів Google Play, App Store, Amazon, AppGallery та інші.

Розробка та підтримка будь-яких видів мобільних додатків:

Інформаційні та розважальні мобільні програми
Новинки, ігри, довідники, онлайн-каталоги, погодні, фітнес та здоров'я, туристичні, освітні, соціальні мережі та месенджери, квіз, блоги та подкасти, форуми, агрегатори
Мобільні програми електронної комерції
Інтернет-магазини, B2B-додатки, маркетплейси, онлайн-обмінники, кешбек-сервіси, біржі, дропшиппінг-платформи, програми лояльності, доставка їжі та товарів, платіжні системи
Мобільні програми для управління бізнес-процесами
CRM-системи, ERP-системи, управління проектами, інструменти для команди продажів, облік фінансів, управління виробництвом, логістика та доставка, управління персоналом, системи моніторингу даних
Мобільні програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, платформи надання електронних послуг, платформи кешбеку, відеохостинги, тематичні портали, платформи онлайн-бронювання та запису, платформи онлайн-торгівлі

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

Послуги, які ми пропонуємо
Показано 1 з 1Усі 1735 послуг
Налаштування MongoDB для мобільного додатку
Середній
~2-3 дні
Часті запитання

Наші компетенції:

Етапи розробки

Останні роботи

  • image_mobile-applications_feedme_467_0.webp
    Розробка мобільного додатка для компанії FEEDME
    792
  • image_mobile-applications_xoomer_471_0.webp
    Розробка мобільного додатку для компанії XOOMER
    671
  • image_mobile-applications_rhl_428_0.webp
    Розробка мобільного додатку для компанії RHL
    1097
  • image_mobile-applications_zippy_411_0.webp
    Розробка мобільного додатку для компанії ZIPPY
    969
  • image_mobile-applications_affhome_429_0.webp
    Розробка мобільного додатку для компанії Affhome
    914
  • image_mobile-applications_flavors_409_0.webp
    Розробка мобільного додатку для компанії FLAVORS
    495

Налаштування MongoDB для мобільного додатку

MongoDB у контексті мобільних додатків найчастіше означає Atlas — облічний MongoDB з вбудованими можливостями для мобільних: Atlas Device SDK (раніше Realm), Atlas Search, Atlas Data API. Прямій підключення до MongoDB з мобільного клієнта через нативний драйвер — не практикується з тих же причин, що й з PostgreSQL: учітні дані у коді, відсутність авторизаційного прошарку.

Дві стратегії використання

Стратегія 1: MongoDB як бекенд-база. Мобільний клієнт звертається до API (Node.js + Mongoose, або Atlas App Services), API працює з MongoDB. Стандартна серверна архітектура.

Стратегія 2: Atlas Device SDK (Realm) + Atlas Device Sync. Локальна Realm база на пристрої автоматично синхронізується з Atlas MongoDB у хмарі. Двустороння синхронізація без написання sync-логіки вручну.

Для більшості проектів — перша стратегія. Друга виправдана при складних вимогах до офлайн-режиму.

API з Mongoose на Node.js

// Схема з валідацією
const productSchema = new Schema({
    _id: { type: String, default: () => new ObjectId().toHexString() },
    title: { type: String, required: true, maxlength: 200 },
    categoryId: { type: String, required: true, index: true },
    priceCents: { type: Number, required: true, min: 0 },
    images: [{ url: String, width: Number, height: Number }],
    tags: [{ type: String, index: true }],
    metadata: Schema.Types.Mixed,        // гнучке поле для розширяємих даних
    isActive: { type: Boolean, default: true, index: true },
    createdAt: { type: Date, default: Date.now, index: true }
}, {
    collection: 'products',
    versionKey: false
})

// Compound index для типичних мобільних запитів
productSchema.index({ categoryId: 1, isActive: 1, createdAt: -1 })
productSchema.index({ tags: 1, isActive: 1 })

Найчастіша помилка — забути index: true на полях, по яких фільтрується. MongoDB без індексу робить collection scan — на 100K документів це секунди замість мілісекунд.

Агрегаційний pipeline для мобільного API

find() з простими фільтрами — для несложних запитів. Для статистики, складних виборок, join-у колекцій — aggregation pipeline:

// Каталог з кількістю товарів по категоріям
const categoriesWithCount = await Category.aggregate([
    { $match: { isActive: true } },
    {
        $lookup: {
            from: 'products',
            let: { categoryId: '$_id' },
            pipeline: [
                { $match: { $expr: { $and: [
                    { $eq: ['$categoryId', '$$categoryId'] },
                    { $eq: ['$isActive', true] }
                ]}}},
                { $count: 'total' }
            ],
            as: 'productCount'
        }
    },
    {
        $project: {
            name: 1,
            slug: 1,
            imageUrl: 1,
            productCount: { $ifNull: [{ $first: '$productCount.total' }, 0] }
        }
    },
    { $sort: { sortOrder: 1 } }
])

Atlas Search для пошуку

Повнотекстовий пошук через Atlas Search (Lucene під капотом) швидше, ніж regex або text index:

// Atlas Search index definition (в Atlas Console або через Atlas API)
const searchResults = await Product.aggregate([
    {
        $search: {
            index: 'product_search',
            compound: {
                must: [{
                    text: {
                        query: searchQuery,
                        path: ['title', 'description'],
                        fuzzy: { maxEdits: 1 }
                    }
                }],
                filter: [{ equals: { path: 'isActive', value: true } }]
            }
        }
    },
    { $limit: 20 },
    { $project: { title: 1, priceCents: 1, thumbnailUrl: 1, score: { $meta: 'searchScore' } } }
])

Fuzzy пошук з maxEdits: 1 — знаходить «ноутбук» при запиті «ноутьбук». Для мобільного пошуку це важливо: віртуальна клавіатура додає опечатки.

Change Streams для real-time

MongoDB Change Streams — аналог PostgreSQL LISTEN/NOTIFY. Бекенд підписується на зміни колекції, рассилає eventos мобільним клієнтам через WebSocket:

const changeStream = Product.watch([
    { $match: { operationType: { $in: ['insert', 'update', 'delete'] } } }
], { fullDocument: 'updateLookup' })

changeStream.on('change', (change) => {
    if (change.operationType === 'update') {
        const updatedProduct = change.fullDocument
        wsServer.broadcast(`category:${updatedProduct.categoryId}`, {
            type: 'PRODUCT_UPDATED',
            data: updatedProduct
        })
    }
})

Change Streams вимагають MongoDB replica set — в Atlas це включено за умовчанням.

Atlas Data API

Для простих CRUD без кастомного бекенда Atlas пропонує Data API — HTTP-ендпоінти до MongoDB через HTTPS, аутентифікація через API-ключі або JWT. Мобільний клієнт робить REST-запити напрямки.

Підходить для прототипів та простих додатків. У production з кастомною бізнес-логікою Data API недостатньо гнучкий.

Налаштування MongoDB Atlas, схем, індексів, Atlas Search та API для мобільного додатку: 1–2 тижні. Вартість рассчитывается індивідуально.