Ответы пользователя по тегу MongoDB
  • Как подключить mongoose-auto-increment?

    @dimonnwc3
    не экспортировать модель Admin сразу, а сохранить в переменную например AdminSchema:

    let AdminSchema  = new mongoose.Schema({
      username…
      …..
    });


    и подключить как обычный плагин:

    AdminSchema.plugin(autoIncrement.plugin, 'Admin');

    и после этого уже экспортировать Admin
    let Admin = mongoose.model('Admin', accountSchema);
    modules.exports = Admin;
    Ответ написан
    Комментировать
  • Как правильно связать два объекта в Mongoose (MongoDB)?

    @dimonnwc3
    Во первых:
    user: user._id - сохранять надо не сам айди в строке, а mongoose ObjectID
    Так гласит схема "user: { type: mongoose.Schema.Types.ObjectId, ref: 'User' }"

    Но mongoose немножко умный, поэтому можно в user вставлять самого юзера полученного при запросе из базы, а mongoose сам добавит корректый ObjectID в поле.
    Важно, чтобы user был именно mongoose объектом со всеми методами, а не очищенный plainobject.

    Далее в монго нету foreign key, поэтому такие схемы как выше не желательны. Где юзер ссылается на стори, а стори на юзера. Получается при любых операциях со стори, надо апдейтить юзера и обратно. А это 2 запроса.

    Тут либо в user пишется массив story либо, либо каждой story присваивается создатель.
    Т.е либо родитель имеет инфу о ребенке, либо ребенок о родителе, НО не то и другое вместе.

    Какой способ лучше, зависит от конкретной ситуации, нужно смотреть какая информация и как выводиться чаще.

    Я бы предпочел хрнаить в каждой story userid. А user оставить пустым.
    Ответ написан
    2 комментария
  • Как заставить MongoClient (пакет mongodb из node.js) повторить попытку подключения к базе?

    @dimonnwc3
    auto_reconnect: false, может стоит для начала true поставить?
    Ответ написан
    Комментировать
  • Как сделать populate (join) двух коллекций в Mongoose?

    @dimonnwc3
    Я не до конца понимаю вопрос, но попробую ответить, как я понял.
    Есть Трейлеры, которые имеют ID видео на ютубе, и путь к постеру(jpg).

    По сути, сама схема построена не правильно
    Для чего используются отдельные коллекции YouTube и Posters ?

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

    Можно сделать ОДНУ вложенную схему вместо трех, без ссылок DBref.

    var trailerSchema = Schema({
        timestamp: String,
        youtube : String
        poster : String
    });


    Либо если трейлер, может иметь много постеров, то с помощью массива объектов:
    var trailerSchema = Schema({
        timestamp: String,
        youtube :  [{name: String, url: String}]
        posters : [{name: String, url: String}]
    });


    так запрос:
    Trailer.find(query);
    Будет сразу выдавать информацию, со ссылками на ютуб и постеры, без популяции.

    Не нужно пытаться эмулировать джоины и использовать коллекции, как таблиц, там где это не требуется.

    PS. С DBref это тоже можно сделать, но я не вижу в этом примере смысла.
    Ответ написан
    Комментировать