[英]MongoDB: Optimized search of multiple collections
我想改善我的搜索方法-應該不區分大小寫。 在我的設置中,有五個不同的集合,我想搜索它們的title
字段。 另外,我還需要獲取部分結果(至少3個字符)。
例
// Collection 1
{ title: 'Sample' },
{ title: 'Another sample' }
{ title: 'This is an example' }
// Collection 2
{ title: 'Something else' },
{ title: 'A sample document' }
{ title: 'This is another example' }
Ample
:所有文件,第二個收藏集的第一個除外 Sample
:集合1的前兩個文檔和集合2的第二個文檔 another
:收集的第二份文件1 is
:不應給出任何結果(<3個字符) 到目前為止,我已經做到了
db.collection.find({ title: new RegExp(value, 'i') }).fetch()
...對於每個集合,並將結果合並到一個數組中。
但是我認為這不是最佳選擇,因為使用了正則表達式,並且所有文件都必須由數據庫搜索。
因此我轉向使用全文搜索。 我在title
添加了索引並嘗試了以下操作:
db.collection.find({ $text: { $search: value } }).count()
但是后來Samp
甚至沒有給我第一份文件。
最后但並非最不重要的一點是,我不知道如何對所有五個集合進行搜索以將所有匹配項作為一個結果。
這是MongoDB手冊所說的:
對於區分大小寫的正則表達式查詢,如果該字段存在索引,則MongoDB會將正則表達式與索引中的值進行匹配,這可能比集合掃描更快。 如果正則表達式是“前綴表達式”,則可能會發生進一步的優化,這意味着所有潛在的匹配都以相同的字符串開頭。 這允許MongoDB從該前綴構造一個“范圍”,並且僅與該范圍內的索引值匹配。
如果正則表達式以尖號(^)或左錨(\\ A)開頭,后跟一串簡單符號,則為“前綴表達式”。 例如,將僅通過匹配索引中以abc開頭的值來優化正則表達式/^abc.*/。
這很重要:
對於不區分大小寫的正則表達式查詢,這些查詢通常無法有效使用索引。
對於您的情況,您應該使用$regex
關鍵字,並在value
var中使用.*
。
db.collection.find({ $text: { $regex: value, options: 'i' } }).count()
對於您的最后一個問題-除了在每個集合上進行find
,將結果通過.forEach
傳遞並將結果附加到同一數組/對象外,我沒有其他解決方案。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.