@wini666

Как делать выборки из нормализованных форм в Mongoose?

Как выбрать все артикли с определённым лейблом тега, если в экземплярах модели Article лежит только массив с id'шниками соответствующих экземпляров модели Tag ?

articleSchema.statics.list = function ({tag, sort, limit, skip}) {

    return this
        .find({
            ??????????????? 'tags.label': tag  ???????????
        })
        .sort('-' + sort)
        .skip(parseInt(skip))
        .limit(parseInt(limit))
        .populate('tags')
        .exec()
};


Модель Article
const articleSchema = new mongoose.Schema({
    title: {
        type: String,
        required: true
    },

    body: {
        type: String,
        required: true
    },

    tags: [{
        type: Types.ObjectId,
        ref: 'Tag'
    }],

}, {timestamps: true});


Модель Tag
const tagSchema = new mongoose.Schema({

    label: {
        type: String,
        required: true,
        //default: 'untagged'
    },
    articleId:[{
        type: Types.ObjectId,
        ref : 'Article'
    }],

},{timestamps: true});
  • Вопрос задан
  • 362 просмотра
Решения вопроса 1
Ptolemy_master
@Ptolemy_master
Насколько я знаю, сделать такой поиск одним запросом в монго невозможно - так как не поддерживаются joins, поиск может идти только в пределах одной коллекции.
Попробуйте пересмотреть подход, например, денормализовать данные и сделать еще одну коллекцию для связи артиклей с тэгами. Или отталкиваться от тэгов, а не от коллекций - то есть тэги могут содержать ссылки на те артикли, которые их используют.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы