0

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

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

如果我用原始的 Python 结构来做,我会做一个列表,第一级是 AND,第二级列表是 OR,在这种情况下: [["English", "Literature", "Language"],["Chemistry"],["Methods","Specialist Maths"]] 这就是我所说的这种情况需要英语 AND 化学 AND(方法或专家)。

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

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

4

1 回答 1

1

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

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

{_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.

于 2013-01-24T09:08:44.290 回答