【问题标题】:How to do advanced list modelling and matching in MongoDB如何在 MongoDB 中进行高级列表建模和匹配
【发布时间】:2017-08-01 21:29:35
【问题描述】:

我正在构建一个大学课程搜索应用程序,并且我的数据包含我需要匹配的先决条件字段。

看起来像这样:“任何英语、化学、方法或专业数学”

如果我使用原始 Python 结构执行此操作,我将创建一个列表,其中第一级为 AND,第二级列表为 OR,在这种情况下: [["English", "Literature", "Language"],["Chemistry"],["Methods","Specialist Maths"]] 这就是我所说的这种情况需要英语和化学和(方法或专家)的方式。

然后使用 Python,我将对其进行迭代并检查是否满足条件。

那么,有了这样的数据和一堆输入主题,我如何使用 MongoDB 查询来检查课程是否合适?

【问题讨论】:

    标签: python mongodb data-modeling database


    【解决方案1】:

    您要执行的操作对于普通查询运算符来说太复杂了。所以你需要使用$where operator,它可以在查询中执行任意JavaScript。它带有警告和限制,因此如果需要检查大量匹配排列,它可能会非常慢。

    一个建议 帮助是创建一个单独的集合,其中文档是您的个人或先决条件列表。该集合将代表所有类的所有先决条件。例如:

    {_id: ObjectId("50fe0f437f774e8013000001"), 
        prereq: ["English", "Literature", "Language"]},
    {_id: ObjectId("50fe0f437f774e8013000002"), 
        prereq: ["Chemistry"]},
    {_id: ObjectId("50fe0f437f774e8013000003"), 
        prereq: ["Methods","Specialist Maths"]},
    ...
    

    课程本身将指向先决条件的 ObjectId,而不是实际值。查询将分两步进行。首先找到与输入主题匹配的所有先决条件。

    db.preReqCollection.find({prereq: {$in: inputSubjectList}) 
    ==> matchingPreReqList (the List of ObjectIds from preReqCollection met by inputSubjectList)
    

    然后使用更简单的$where operator 查询来检查课程先决条件是否在matchingPreReqList 中。

    【讨论】:

    • 嗯...我喜欢这个。感谢您的帮助!
    猜你喜欢
    • 2021-05-26
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-08-05
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    • 1970-01-01
    相关资源
    最近更新 更多