Ответы пользователя по тегу Mongoose
  • Почему так много коннектов к Монго?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Драйвер монги имеет default connection pool = 5, это можно изменить, см. тут:
    https://mongodb.github.io/node-mongodb-native/driv...
    Ответ написан
    Комментировать
  • Как лучше реализовать структуру mongodb?

    MarcusAurelius
    @MarcusAurelius
    автор Impress Application Server для Node.js
    В одной конечно, не выдумывайте хитростей, прочитайте лучше раздел документации к монге про моделирование данных https://docs.mongodb.org/v3.0/core/data-modeling-i... создайте индексы. Так будет много удобнее работать с данными, искать по ним, бекапить и манипулировать.
    Ответ написан
    Комментировать
  • Как вытащить переменную за рамки функции в JavaScript?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Как раз этого делать не нужно. Вместо этого нужно понять идею асинхронного программирования. Все колбэки исполняются не по месту своего объявления, а тогда, когда к ним приходят данные, поэтому в Вашем примере кода сначала происходит console.log(items_list); а уже потом items_list = data И это хорошо, потому, что не происходит ожидания исполнения коллбеков, не происходит блокирования потока исполнения. Всю синхронную логику обработки полученных в коллбеке данных Вы можете написать прямо в коллбеке, а если нужно реализовать последовательный или параллельный вызов нескольких ассинхронных запросов (все, что связано с вводом/выводом, доступом к базе и файлам, например), то это можно сделать разными способами, самые популярные из них, это библиотека async и промисы. Я использую https://github.com/caolan/async Например:
    var async = require('async');
    var items_list, users_list;
    async.parallel([
        function(callback) { // делаем первый запрос к базе
          db.model('items').find({}, function (err, data) {
            items_list = data;
            callback(); // данные получены, возвращаемся
          });
        },
        function(callback) { // параллельно делаем второй запрос к базе
          db.model('users').find({}, function (err, data) {
            users_list = data;
            callback(); // данные получены, возвращаемся
          });
        }
    ],
    function() {
      // когда оба запроса уже завершены, то мы попадаем сюда
      console.dir({ items: items_list, users: users_list });
    });
    Ответ написан
  • Как получить нужное значения нужного свойства в node?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Это называется проекция, т.е. можно указать какие поля возвращать:
    Data.find( { }, { name: 1, fieldName: 1, id: 0 } , function(err, arr) { ... });
    Ответ написан
  • Всё таки, как работать с мультиязычностью?

    MarcusAurelius
    @MarcusAurelius Куратор тега Node.js
    автор Impress Application Server для Node.js
    Лучше все языковые версии хранить в одном месте, или все на диске или все в базе. Если уж нужно в двух и более местах, если эти шаблоны прямо уж так сильно меняются, то лучше базу принять за основное место и синхронизировать на диск при изменениях или по запросу. Вы же можете генерировать эти json файлы когда захотите. Как хранить в базе есть два варианта, или внутри одного документа/объекта много языковых версий или рядом, добавляя индексируемый ключ. Это зависит от того, какие данные и какие к ним типичные запросы приходят, если данных мало и запросы редкие, то разницы нет. Например, если там 10 форм и у каждой 5 языков, а формы меняются 1 раз в неделю, то удобнее хранить все языки в формах и при изменении перегенерировать JSON на диске. А если это user-generated контент, который нужно постоянно отдавать прямо из базы, то выносите идентификатор языка в ключ с индексом, так запросы будут быстрее. А при большой нагрузке лучше кешировать языковые версии прямо в оперативной памяти на сервере, чтобы быстрее отдавать и реже ходить к базе за ними.
    Ответ написан
    2 комментария