首页 > 解决方案 > Mongoose - 选择具有对象数组作为搜索参数的文档

问题描述

我无法找到有关我的问题的信息 - 不过我可能一直在寻找错误的东西。

我在 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
                }
            }
        ]);
    }
});

有没有办法在简单的查询/数据库操作/聚合管道中做到这一点?我想避免一个又一个地执行一堆查询。非常感谢帮助,谢谢!

标签: mongodbmongooseaggregation-framework

解决方案


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

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

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


推荐阅读