【问题标题】:Mongo DB - How to create a dynamic field based on the presence of element in array?Mongodb - 如何根据数组中元素的存在创建动态字段?
【发布时间】:2020-01-24 22:36:29
【问题描述】:

我在 Mongo 中遇到了一个问题,我没有任何线索可以有效地解决它。

假设我有一个类似这样的“课程”集合(索引是在“studentIds”字段上创建的):

{
    "courseId": 1,
    "name": "Mathematics",
    "studentIds": [1,3,5]
    ...
    ...
}
{
    "courseId": 2,
    "name": "Physics",
    "studentIds": [2,3,5]
    ...
    ...
}

我正在尝试编写一个查询,该查询将返回以下格式的记录:

假设学生 1 正在查询课程,他注册了 courseId 1,因此“已注册”为 true,但学生 1 未注册 courseId 2,因此“已注册”为 false:

{
    "courseId": 1,
    "name": "Mathematics",
    "enrolled": true
}
{
    "courseId": 2,
    "name": "Physics",
    "enrolled": false
}

我能想到的唯一解决方案是有两个查询,第一个查询以查找学生注册的所有课程 ID,并在第二个查询中通过课程上的光标运行时,根据存在的情况添加“已注册”字段courseId 在第一个查询的结果中,但正在寻找一种在单个查询中实现此目的的方法。

谢谢。

【问题讨论】:

    标签: mongodb mongodb-query


    【解决方案1】:

    您只需要$in 运算符:

    let studentId = 1;
    db.collection.aggregate([
        {
            $project: {
                courseId: 1,
                name: 1,
                enrolled: { $in: [ studentId, "$studentIds" ] }
            }
        }
    ])
    

    Mongo Playground

    【讨论】:

    猜你喜欢
    • 2021-05-24
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-12
    • 1970-01-01
    相关资源
    最近更新 更多