2014-03-29 123 views
0

很抱歉的標題的一個特定值的文件...MongoDB的:找到包含在其領域

我有一個MongoDB的集合是這樣的:

{ 
students: [1, 2, 3], 
teachers: [4, 5] 
}, 
{ 
students: [5, 6, 7, 8, 9], 
teachers: [10] 
}, 
{ 
students: [11, 12, 14, 15, 16], 
teachers: [17, 18] 
supervisor: [5] 
} 

比方說,「1」 「2」,「...」表示是老師,學生還是別的什麼人。我想要做的是找到包含主題5的文檔。

這可能沒有明確地按字段(學生,教師,主管)查詢字段?

感謝;)

回答

1

使用數組時,您受多鍵索引的約束約束。所以你不可能創建一個有多個「數組」類型元素的compound index。這樣就排除了可以在搜索中跨越多個字段的方法。如文字搜索。

必須指定所有領域,但你可以做到這一點與$或條件:

db.collection.find({ 
    "$or": [ 
     { "students": 5}, 
     { "teachers": 5 }, 
     { "supervisor": 5 } 
    ] 
}) 

當然你看的方式來確定你所需要的「田」以這種方式包含,否則就會遭受你可以用mapReduce做的JavaScript掃描。

+0

感謝您的回答。這是我可以生活的東西,更多的是好奇而不是災難。乾杯 – jlazevedo

1

檢查TextIndex的文檔。如果您創建了TextIndex,則可以搜索多個屬性。但是,在創建索引時,您需要包含所有需要搜索的屬性。您還可以爲每個屬性提供權重,以便Mongo可以對結果進行排序取決於哪個屬性與該值匹配。

編輯 - 根據Neil的評論排除文本編輯。你能嘗試在每個屬性上創建單個索引,然後對所有屬性使用OR子句嗎? OR會利用所有單個索引。性能將取決於屬性的數量。

+1

我明白你這麼說過,因爲它似乎是想要在多個領域進行搜索,而且問題有點抽象。但是你不能有一個「文本索引」或任何類型的索引在多個數組或「多鍵」類型的字段。 –

+0

我同意,我將編輯我的帖子。 – hellboy