Ответы пользователя по тегу MongoDB
  • Какую стратегию следует использовать в случае огромного объема данных?

    Ptolemy_master
    @Ptolemy_master Автор вопроса
    К сожалению, в самой базе это невозможно, так как это не наша база, а клиентов. Заводить отдельную коллекцию в нашей базе с этой метаинформацией можно, конечно, но уж очень накладно. Решили пока просто ограничивать размер выборки.
    Ответ написан
    Комментировать
  • Как построить архитектуру БД в веб-приложении?

    Ptolemy_master
    @Ptolemy_master
    Для нерелялиционных баз то же самое. Mongoose, кстати, как раз для этого и создан - позволяет создавать схемы для schemaless баз данных, связывая коллекции между собой практически без усилий.
    Ответ написан
  • Как правильно сделать облако тегов с MongoDB?

    Ptolemy_master
    @Ptolemy_master
    Я бы сделала так.
    Страница со списком документов загружается как обычно, попутно подгружается список тэгов, который хранится как обычный массив строк, привязанный к профилю пользователя, сформированный как описано в вашем варианте номер 1. (Делать отдельную коллекцию для простых списков смысла не вижу, всегда лучше начинать с минимизации сущностей - бритва Оккама, ага :)
    Когда мы загружаем страницу со списком, идет подгрузка тэгов. Все последующие обращения к другим страницам делаются асинхронно, следовательно, облако тэгов больше загружать не надо.
    Я не знаю, что вы используете на клиенте, я работаю плотно с Angular, поэтому говорить могу только про него.
    Технически это было бы сделано так - маршрут для списка документов прописан на сервере, идет возврат клиенту профиля со списком тэгов. А маршруты ангуляра содержат обращения к страницам. В случае первичной загрузки идет запрос на страницу номер 1 (как resolver для этого маршрута), последующие вызовы - просто асинхронно к выборке соответствующей страницы.

    Добавление.
    Автор поста задал дополнительный вопрос. Вы спрашивали, когда обновлять список. Вопрос не такой просто и очевидный. В идеальном варианте облако тэгов должно обновляться сразу же как только пользователь добавил или изменил существующие тэги. Если хотите реализовать именно эту функциональность, то можно сделать через сокеты (новый список тэгов посылается клиенту в браузер, это не сложно на самом деле). Другой вариант - отслеживать на сервере при сохранении документа, изменился ли список тэгов, и, если да, в ответе отправлять обновленный список и его на клиенте обновлять. Тоже ничего вариант, по-моему.
    Ответ написан
    Комментировать
  • Возможно ли держать в Mongo 2 полу-одинаковых документа?

    Ptolemy_master
    @Ptolemy_master
    Именно так это и обновляется.
    https://docs.mongodb.com/manual/reference/method/d...
    В параметре query вы задаете условие, по каким полям и как производится выборка, далее в параметре update - что и как модифицировать. Не забудьте, что если обновляете не все поля, то обновление надо делать через $set, иначе он удалит все остальные поля.
    Ответ написан
    Комментировать
  • Как реализовать схемы с подтипами в mongoose?

    Ptolemy_master
    @Ptolemy_master
    Как насчет общей схемы, "вставляемой" в объект в виде референса? То есть разные схемы ссылаются на общую.
    Ответ написан
    Комментировать
  • Как делать выборки из нормализованных форм в Mongoose?

    Ptolemy_master
    @Ptolemy_master
    Насколько я знаю, сделать такой поиск одним запросом в монго невозможно - так как не поддерживаются joins, поиск может идти только в пределах одной коллекции.
    Попробуйте пересмотреть подход, например, денормализовать данные и сделать еще одну коллекцию для связи артиклей с тэгами. Или отталкиваться от тэгов, а не от коллекций - то есть тэги могут содержать ссылки на те артикли, которые их используют.
    Ответ написан
    1 комментарий
  • Как получить всю коллекцию monogoose?

    Ptolemy_master
    @Ptolemy_master
    Coder321: Не получится по той причине, что запрос вернет только записи, относящиеся к определенной модели, а топикстартеру надо все.

    Можно попробовать так, как описано здесь https://stackoverflow.com/questions/21429630/query...

    MongoClient.connect("mongodb://localhost:27017/exampleDb", function(err, db) {
    if(err) { return console.dir(err); }

    var collection = db.collection('kittens');

    collection.find().toArray(function(err, kittens) {
    // here ...
    });
    });


    Правда, это не Mongoose
    Ответ написан
    1 комментарий