0

大学のコース検索アプリケーションを作成していますが、データには照合する必要がある前提条件フィールドが含まれています。

次のように表示されます: 「英語、化学、方法論、または専門家の数学」

生の Python 構造でそれを行っていた場合、最初のレベルが AND で、2 番目のレベルのリストが OR であるリストを作成します。この場合、このケース [["English", "Literature", "Language"],["Chemistry"],["Methods","Specialist Maths"]] では英語の AND 化学 AND (メソッドまたはスペシャリスト)。

次に、Python を使用して反復処理を行い、条件が満たされているかどうかを確認します。

では、このようなデータと多数の入力科目を使用して、MongoDB クエリを使用してコースが適切かどうかを確認するにはどうすればよいでしょうか?

4

1 に答える 1

1

あなたがやろうとしていることは、通常のクエリ演算子には複雑すぎます。したがって、クエリで任意のJavaScriptを実行できる$where演算子を使用する必要があります。警告と制限があります。そのため、一致する順列を多数チェックする必要がある場合は、非常に遅くなる可能性があります。

役立つ可能性のある1つの提案は、ドキュメントが個別のORまたは前提条件のリストである別のコレクションを作成することです。このコレクションは、すべてのクラスのすべての前提条件を表します。例えば:

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

コース自体は、実際の値ではなく、前提条件のObjectIdを指します。その場合、クエリは2つのステップになります。まず、入力対象に一致するすべての前提条件を見つけます。

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 に答える