猫鼬-选择带有对象数组作为搜索参数的文档

时间:2018-11-30 10:00:18

标签: mongodb mongoose aggregation-framework

我无法找到有关我的问题的信息-虽然我可能一直在寻找错误的信息。

我在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 :(得分:0)

根据您所需的查询输出,我将数据结构重新组织为如下所示(NB,伪代码形式):

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

然后,您可以执行aggregate操作并使用project格式化输出。