Ответы пользователя по тегу MongoDB
  • Как сортировать выборку MongoDB по количеству удовлетворённых условий в $or?

    @lega
    Вам лучше воспользоваться текстовым индексом, наиболее релевантные документы "вылезут" наверх.
    Так же можете попробовать sphinx/elastic search.
    Ответ написан
  • Как обновить значение поля в mongo?

    @lega
    db.collection.update({ 'data.username1': {$exists: true} }, { $set: { 'data.username1': newValue }}, true)

    Такой запрос должен обновить все документы где есть это поле, но т.к. запрос без индекса (и не сделать адекватный на эти данные), то будет перебор всех документов - это медленно и будет тормозить на большой коллекции.
    Поэтому лучше сделать "вспомогательные данные" для массива - продублировать идентификаторы в массив:
    {
      "_id":"563f480fb5c2187503eefc1a"
      "ownerBy":"56335521f2f4a3150349d78d",
      "data":{"username1":"76561198060520554","username2":"76561198060520554"...},
      "__v":0,
      userList: ['username1', 'username2', 'username3']
    }

    И сделать индекс: db.collection.ensureIndex({userList: 1})

    Этот список userList, можно обновлять в той же команде что и данные с помощью $addToSet (и $pull для удаления из списка).
    Ответ написан
    Комментировать
  • Как перенести MongoDB на другую машину?

    @lega
    mongodump -> rsync -> mongorestore
    Ответ написан
    Комментировать
  • Mongodb и безопасность, как реализована?

    @lega
    Что в базу положите, то и возьмете.
    За xss должен отвечать рендер.
    Ответ написан
    Комментировать
  • Как сделать вывод меню в интернет-магазине?

    @lega
    для сбора дерева потребуется рекурсия в базу

    Держите список (всех) предков в дочерних элементах, тогда рекурсии не нужны.
    Ответ написан
  • Как в MongoDB ограничить глубину поиска по массиву?

    @lega
    Сделайте 2 массива, в первом 3 первых элемента храните, ну и искать по нему.
    Ответ написан
  • Как реализовать поиск с интервалом по времени в виде цыкла в meteor js?

    @lega
    Нужно в виде какого-то цикла типа while искать появления записей
    Не надо так делать, обработчик который записывает данные пусть рассылает уведомление (вместе с данными, что-б лишний раз в базу не лазить).
    Ответ написан
    Комментировать
  • Почему реплика не переключается в MASTER?

    @lega
    Нужен арбитер (3-я нода).

    При этом если погасить мастера, то слейв так и остается SECONDARY.

    Т.к. у ноды связи больше ни с кем не осталось, она думает что её отключили от сети, а значит мастер в той сети возможно ещё активен и работает, и текущую ноду нельзя переводить в мастер, потому что появятся коллизии изменений.
    Ответ написан
    6 комментариев
  • Почему все скептически относятся к MongoDB?

    @lega
    Опять вам тут "скептические" отзывы наоставляли.

    Можно много филосовских доводов привести, например, если бы у вас был-бы идеальный сервер с неограниченной RAM памятью, скоростью и стабильностью, то ваше приложение могло бы хранить все ваши данные в памяти/переменных (зачем скидывать в БД?), дак вот вы в своем приложении оперируете объектами, а не таблицами! Потому что так удобней (и быстрее - прямая ссылка на связанный объект вместо идентификатора например). И NoSQL - это какое-то отражение этого. А раскладывание по табличкам - это подход из 80х годов, для того что-бы выиграть памяти и скорости, потому что тогда были сервера дохлые.

    Реляционные данные/не реляционные данный - разбрасывание терминами, попытка блеснуть умом?, - монга решает большинство задач, просто она решает их по другому, там нет проблем с ссылками, если нужны джойны (что не факт, возможно достаточно ссылок) или транзакции - можете попробовать ArangoDB, OrientDB...

    Так же в Радио-Т'е (профессиональные) ведущие, в одном из выпусков, сделали "заключение": Монги хватает на 99% задач.
    Поэтому если в вашем проекте где-то попадается тот 1%, то ненужно переводить весь проект на sql, просто сделайте эту задачу в sql, не трогая оставшуюся часть проекта.

    В наше время это вообще проблема - попытка написать все на одном языке. Вместо того что-б ускорить какой-то кусок PHP на С++, они берут и конвертируют весь проект на С++, вместо того что-б только чат сделать на асинхронном фреймворке, они переводят весь проект/блог на асинхронный фреймворк и т.п.
    Ответ написан
    1 комментарий
  • Стоит ли использовать MongoDB для блога?

    @lega
    Стоит, выборки сделаете легко, джойнов нет, но есть подгрузка по ссылке на уровне драйвера (python).
    Как минимум попробовать стоит чтобы понять как оно вам (прежде чем слушать хейтеров и тех кто не "осилил").

    Ещё есть aragondb с джойнами и транзакциями.
    Ответ написан
    Комментировать
  • Как очистить место занимаемое MongoDb?

    @lega
    Набросал некоторые мысли:

    Я в таком случае иногда поднимаю инстанс за "пару минут" в Digital Ocean (40 копеек/час), монтирую его через nfs, делаю mongodump, удаляю базу, mongorestore. Все. - быстро, дешево.
    Либо просто сделать dump/restore с другого хоста (если он есть).

    Так же можете попробовать сделать дамп данных, дамп может весить меньше и если повезет то 3Гб хватит.

    Ещё бывает, что монга держит удаленные временные файлы, которые занимают место, можно попробовать перезагрузить монгу или весь сервер.

    Можете использовать флаг smallfiles, тогда монга будет чуть экономней захватывать место.

    Можно отключить журналирование - высвободится дополнительно 3Гб, тогда на dump/restore хватит, а может и на repairDatabase.
    Ответ написан
    Комментировать
  • Почему MongoDB использует всю оперативную память?

    @lega
    Сначала нужно убедится что это монга, как вы проверяли? Далее поставить (последнюю) стабильную версию.
    Далее сделать индексы для ваших запросов.

    MongoDB просто падает
    сервис так же может падать если кто-то другой съел всю память.
    Ответ написан
    Комментировать
  • Как грамотно хранить порядок записей в mongo?

    @lega
    Тут зависит от того как используются данные, можно сделать так:
    1) не менять index у документов
    2) при удалении документа, остальные документы не трогать
    3) При вставке между 3 и 4, делать индекс 3.5, а между 3.5 и 4 -> 3.75 и т.д. главное что-бы былп правильная сортировка документов.
    4) Вычислять индекс налету.
    Ответ написан
    Комментировать
  • Как в ubuntu установить в автозапуск какие то приложения?

    @lega
    Помимо /etc/rc.local, в ubuntu 14+ , можно поправить /etc/init/mongodb.conf строку ENABLE_MONGODB="yes"
    Так же можно в крон запихать на @reboot
    Ответ написан
    Комментировать
  • Как сделать двустороннее реагирование на изменение данных в БД MongoDB (AngularJS)?

    @lega
    Через oplog - это грязный хак.
    У вас есть код который пишет в базу, вот пусть он и "оповещает" об изменениях, с доставкой через websocket.
    Ответ написан
    Комментировать
  • Как правильно настроить удаленный доступ к MongoDB?

    @lega
    - можно зарезать доступ через iptables
    - можно сделать vpn или проброс порта (например через ssh в одну команду)
    - можно сделать логин/пароль (не рекомендуется)
    Ответ написан
  • Как в mongo удалить часть текста в массиве документа?

    @lega
    Текст его слишком длинный и в консоли mongo не умещается. Как быть?

    Используйте временные переменные.
    Ответ написан
  • Как организовать выгрузку данных на Node.js?

    @lega
    С помощью mongoexport можно выгрузить в csv
    т.е. запустить процесс, и отправить результирующий файл.
    Ответ написан
    Комментировать
  • Кто знает opensource систему справочников?

    @lega
    Вот есть сложный велосипед, если разберетесь. Доки нет.

    Создание коллекций, документов, документов на основе документов, есть не только базовые типы (строки, числа и т.п.). а так же списки, таблицы, ссылки на документы других коллекций
    Можно делать "логические" коллекции, т.е. если у вас есть 3 коллекции: пользователи, менеджеры, клиенты, то можно для одних документов сделать поле-ссылку на (пользователи + менеджеры) либо (менеджеры+клиенты) либо все (любые комбинации), т.е. при редактировании ссылки вываливается подбор из нескольких коллекций (либо открыть диалог выбора). Этой же фичей можно отфильтровать подбор (делается создание обработчика).
    Так же есть (возможно сломана) возможность дропать картинки (прикреплять) к документам.
    Есть фильтрованный поиск, например зафильтровать пользователей по отделу.
    Есть наследование типов, например если вы хотите создавать документы на основе нескольких типов.
    Есть авторизации и ACL по ролям. Можно подключить авторизацию через google, facebook, twitter, ВК. Подключить полнотекстовый поиск через sphinx.
    Просмотр истории документов (видеть как и кем менялся документ).
    Возможность менять представление документов.

    Так же есть возможность брать куски и встраивать в свое веб-приложение, дополнять типы и менять темплейты полей. Можно делать плагины.
    Часть функционала давно не используется, поэтому могло отвалится (нужно фиксить).
    Ответ написан
    Комментировать