如何在MongoDB中进行高级列表建模和匹配

2024-04-26 10:53:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

如果我是用一个原始的Python结构来做的,我会做一个第一级列表,第二级列表,或者,在本例中: [["English", "Literature", "Language"],["Chemistry"],["Methods","Specialist Maths"]] 所以我认为这个案子需要一个英语,化学和(方法或专家)。你知道吗

然后用Python迭代它,检查是否满足条件。你知道吗

那么,对于这样的数据和一堆输入主题,我如何使用MongoDB查询来检查课程是否合适呢?你知道吗


Tags: 数据方法应用程序列表english专业先决条件数学
1条回答
网友
1楼 · 发布于 2024-04-26 10:53:58

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

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

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

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

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

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

相关问题 更多 >