2013-01-24 28 views
0

我正在構建一個大學課程搜索應用程序,並且我的數據包含了我需要匹配的前提條件字段。如何在MongoDB中進行高級列表建模和匹配

它看起來是這樣的:「任何英語,化學,方法或專業數學」

如果我是用Python的原料結構做,我會做第一級福利和和第二級列表清單是OR,在這種情況下: [["English", "Literature", "Language"],["Chemistry"],["Methods","Specialist Maths"]] 這是我怎麼說這種情況下需要英語和化學和(方法或專家)。

然後用Python我只是迭代它,並檢查是否滿足條件。

那麼,如何使用這樣的數據和一堆輸入主題,我可以使用MongoDB查詢來檢查課程是否合適?

回答

1

你想要做的事對於普通的查詢操作符來說太複雜了。因此,您需要使用$where operator,它可以在查詢中執行任意JavaScript。它帶有警告和限制,所以如果需要檢查很多匹配的排列,它可能會非常慢。

一個建議,可能 幫助是創建一個單獨的集合,其中文檔是您的個人或OR前提條件列表。這個集合將代表所有類的所有先決條件。例如:

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

+0

嗯......我喜歡這個。謝謝您的幫助! – user478250