Ответы пользователя по тегу MongoDB
  • Как сделать поддержку нескольких языков в Node.JS + MongoDB?

    @bromzh
    Drugs-driven development
    * В монге можно строить индексы искать по текстовым полям с учётом языка. См. тут и тут.
    * Можно просто хранить переводы в любом удобном формате, а при запросе к монге получать только необходимые.
    * Если строки, для которых нужны переводы ограничены и заранее известны, то можно хранить переводы в отдельных файлах. В монге, например, хранить только ключ, по которому будет браться перевод. Плюс в том, что править переводы так намного проще и можно поручить это дело людям, не знающим про монгу, ноду и другие страшные слова. Гуглить нужные библиотеки можно по словам `nodejs i18n`.

    Ну и в любом случае, надо как-то получить информацию о локали пользователя. Брать её можно из заголовка `Accept-Language`, из кук или из профиля пользователя.
    Ответ написан
    Комментировать
  • Как правильно связать два объекта в Mongoose (MongoDB)?

    @bromzh
    Drugs-driven development
    Что я делаю не так?

    Используешь монго там где не надо.
    Как правильно сохранять объекты со связями?

    Взять реляционную БД. В самом названии есть намёк, что такие БД хорошо подходят для хранения объектов со связями.

    Вот какой смысл брать монгу и пытаться построить архитектуру в стиле реляционных БД? Что мешает хранить story в поле документа юзера?
    Ответ написан
  • Связь данных между базами в MongoDB возможно ли?

    @bromzh
    Drugs-driven development
    Вот зачем брать NoSQL БД, а потом спрашивать, как тут делать типичные для реляционных баз вещи.
    Нужны связи - бери postgresql какой-нибудь. Или меняй схему и храни задачи вместе с пользователем в 1 документе. Зачем использовать инструмент не по назначению?

    Но если уж приспичило, то читай тут. Не знаю, есть ли join'ы на уровне БД в монге, но если чо, их можно сделать программно в 2 запроса.
    Ответ написан
    Комментировать
  • Как правильно структурировать mongodb?

    @bromzh
    Drugs-driven development
    Лучший способ - взять реляционную БД, раз тут зреет структура и отношения. Для этого они и нужны.
    Когда начинаются вопросы "какую структуру выбрать" или "как хранить, всё в 1 документе или по коллекциям" сразу становится понятно, что выбор БД был неверным.

    Но раз уж монга, то лучше хранить всё в 1 документе, а не размазывать всё по кучи коллекций. А чтобы быстро искалось (в том числе, и по полям внутренних объектов) есть индексы.
    Да, у монги есть и подобие транзакций, и джойны. Но в реляционных БД это всё сделано лучше и надёжнее, ACID всё же. Так что минимум коллекций, потолще документы.
    Ответ написан
    1 комментарий
  • Как сохранить фото в MongoDB?

    @bromzh
    Drugs-driven development
    С монгой поставляется файловое хранилище (GridFS). Используй его. В поле же храни id файла, при загрузке записи подгружай отдельным запросом.
    Ответ написан
    Комментировать
  • Как дождаться в NodeJS выполнения mongodb.forEach и подзапросов и вернуть результат?

    @bromzh
    Drugs-driven development
    promise

    UPD
    Отвечаю на коммент тут.

    В промисах (их есть несколько реализаций, но суть у всех одна) есть функция all, которая вернёт результат промисов всех переданных в неё промисов. Типа такого

    Так что можешь создать массив, на каждом шаге цикла оборачивать ответ в промис (если он сам не промис) и потом передать всё в метод all. Например, смотри в конец первого ответа

    Примерный код такой:
    var queue = [];
    cursor.forEach(function (element) {
        queue.push(Promise.resolve(element));
    });
    Promise.all(queue).then(function(arrayOfResults) {
        // тут делаешь что-то с массивом результатов.
    });
    Ответ написан
    3 комментария
  • Как связать Netty c MongoDb?

    @bromzh
    Drugs-driven development
    В третьей версии драйвера для явы появилась асинхронность.
    Ответ написан
    Комментировать
  • Есть ли смысл в инкрементируемых ИД для всех таблиц в mongodb?

    @bromzh
    Drugs-driven development
    А к чему эти человекопонятные ид? Оставь всё как есть, но создай индекс на поле, в индексе укажи, что он будет уникальный. Поле можешь сделать числовым, или строковым (slug). Автоинкременты придётся самому реализовывать. Поэтому лучше использовать то, что есть. Или перейти на postgresql. В новой версии появился тип json, там последовательности есть, и индексы для офигенно быстрого поиска. Не зря же именно разраб постгреса запилил новый движок для монги, который стал намного быстрее старого.
    Ответ написан
    Комментировать
  • Что потребуется для реализации простого взаимодействия с Mongo DB?

    @bromzh
    Drugs-driven development
    Надо выбрать язык для бэкенда и реализовать простое веб-приложение на нём. Это веб-приложение должно принимать данные POST-запроса, валидировать их и сохранять в БД, а также делать выборку всех элементов из БД и передавать клиенту.
    Короче, это можно сделать как REST-вебсервис, который гоняет данные в формате JSON и обеспечивает простой CRUD-функционал. В качестве серверного языка бери, что лучше знаешь.
    Ответ написан
  • Как организовать струткуру приложения для избежания циклиеских импортов?

    @bromzh
    Drugs-driven development
    1) выносишь создание монги и других модулей в отдельный файл
    2) импортируешь этот файл внутри create_app и инициализируешь его
    3) в блюпринтах импортируешь по-обычному
    4) создай какой-нибудь run.py, в котором импортитшь create_app, создаёшь и запускаешь приложуху
    5) ...
    6) PROFIT

    # app.py
    def create_app():
        app = Flask(__name__)
        app.config.from_object('config')
    
        from mail import mail
        mail.init_app(app)
      
        from models import db
        db.init_app(app)
        add_blueprints(app=app)
        return app
    
    # models.py
    from flask.ext.mongoengine import MongoEngine
    db = MongoEngine()
    
    # mail.py
    from flask.ext.mail import Mail
    mail = Mail()
    
    # run.py
    from app import create_app
    app = create_app()
    if __name__ == '__main__':
        app.run()
    Ответ написан
    1 комментарий