2014-09-04 66 views
0

什麼是一個名爲集合中執行以下類型的搜索的最佳途徑「的事情」:有多個鍵搜索和「開始」

mylist = ['lak', 'dodg', 'ang'] 

和回報可能是:

["lake", "Lakers", "laky", "dodge", "Dodgers", "Angels", "angle"] 

我需要爲每個執行單獨的查詢嗎?

+0

lak從哪裏來的?它們是否像文本搜索算法一樣是真正的詞幹?如果是這樣,你應該檢查[文本索引](http://docs.mongodb.org/manual/core/index-text/)。否則,我同意下面的答案,除了我想補充的是,不必區分大小寫,因爲MongoDB可以優化查詢,所以它實際上不是一個正則表達式查詢。你能否以小寫字母插入所有單詞,並用小寫字母「stems」進行搜索? – wdberkeley 2014-09-05 02:36:18

回答

1

要做到這一點,你想使用mongodb命令$in來搜索與你的數組中的東西匹配的所有東西。

你會使用的命令是:

db.things.find({name: { $in: mylist }}) 

但對於這個工作,你希望你的陣列中要使用正則表達式,所以你可以在陣列中定義它們,或者如果你想維護字符串,然後做最好的事情可能只是創建另一個數組並循環並從字符串創建正則表達式。

mylist = [/^lak/i, /^dodg/i, /^ang/i] 

^使得只有當它與值開始匹配,並且在i年底使搜索不區分大小寫。

+0

@NeilLunn我已經更新了我的答案,使正則表達式不區分大小寫,並且我已經在我的本地服務器上進行了測試,並且使用正則表達式可以正常工作。你可能在想所有不起作用的東西? – braza 2014-09-04 23:59:16

+0

嗯。我應該正確閱讀文檔,[支持正則表達式](http://docs.mongodb.org/manual/reference/operator/query/in/#use-the-in-operator-with-a-regular-expression) 。但它也應該有一個錨,否則它可以匹配「桑格利亞」例如。但是,也許一個字邊界會做。 – 2014-09-05 00:08:02