Mongoose - выбор документов с массивом объектов в качестве параметра поиска - PullRequest
0 голосов
/ 30 ноября 2018

Я не смог найти что-то относительно своей проблемы - хотя, возможно, я искал не ту вещь.

У меня довольно простая структура документа в MongoDB:

const Entry = new mongoose.Schema({
    course: {
        type: String,
        trim: true,
        required: true
    },
    year: {
        type: Number,
        required: true
    },
    group: {
        type: String,
        trim: true
    },
    title: {
        type: String,
        trim: true,
        required: true
    }
});

(Сокращено для лучшей читаемости.)

Мне нужно найти все Entries, которые соответствуютодин из Courses (схема ниже):

const Course = new mongoose.Schema({
        course: String,
        year: Number,
        group: String,
        title: String
    });

Я мог бы использовать цикл for, чтобы выполнить поиск для каждого элемента в моем Courses -Array, а затем сделать что-то подобное:

Course.find({some condition}).then(courseschema => {
    for (let i = 0; i < courseschema.length; i++) {
        TimetableEntry.aggregate([
            {
                $match: {
                    year: courseschema[i].year,
                    course: courseschema[i].course,
                    title: courseschema[i].title,
                    group: courseschema[i].group
                }
            }
        ]);
    }
});

Есть ли способ сделать это в простом конвейере запросов / операций по базам данных / агрегации?Я хотел бы избежать выполнения множества запросов после одного и другого.Помощь очень ценится, спасибо!

1 Ответ

0 голосов
/ 30 ноября 2018

Исходя из желаемого результата запроса, я реорганизовал бы структуру данных примерно так (NB, псевдокод):

CourseSchema({
  "year": Number,
  "group": String,
  "title": String
});

Затем вы можете выполнить операцию aggregate и отформатироватьвывод с использованием project например.

...