2012-11-30 121 views
7

我正在使用JavaScript來查詢基於Mongo DB的API。MONGO DB Like Operator

我需要根據LIKE操作,類似的東西,結果篩選到

select * from playlist where title like '%a%' 

此刻,我把這個網址

var assetUrl = 'https://example.com/playlist?oauth_token=' + accessToken + '&account=XXX'+ '&fields={"title":true,"splash":true,"description":true,"source":true}'+ '&criteria={"title":/.*a.*/}'; 

沒有成功(返回0對象)。

我想知道是否應該使用正則表達式來代替,以及如何在這種情況下使用它們。謝謝

回答

18

是的,MongoDB支持正則表達式。你可以在the documentation閱讀。以下是一個示例:

db.collection.find({ url: /.*a.*/ }); 

這將查找集合中字段「url」與正則表達式匹配的所有文檔。還有一個使用$ regex運算符的替代語法:

db.collection.find({ url: { $regex: ".*a.*"} }); 

請注意,正則表達式很慢並且縮放比較嚴重。搜索時間與集合中的記錄數量成線性關係,只有當您的正則表達式以字符串開頭的起點^(謝謝,chx)開始時,索引纔有用。

該文檔還有一個關於Full Text Search in Mongo的章節,其中建議將每個字符串拆分爲單個單詞的數組,以便您可以對其進行索引以便快速查找。這當然不允許搜索單詞片段,但大大加快了搜索完整單詞的速度。

更新:的MongoDB 2.4具有a new experimental text-index feature允許加快文本搜索與索引。

UPDATE2:作爲2.6版本,文本搜索默認情況下啓用,並準備用於生產。

+2

有時正則表達式是不慢:「$正則表達式使用索引只有當正則表達式有一個字符串爲開頭的錨(即^)」。 http://docs.mongodb.org/manual/reference/operators/ – chx

+0

謝謝@chx,我將這些信息整合到我的答案中。 – Philipp

0
var assetUrl = 'xxx.com/playlist?oauth_token=' + accessToken + '&account=xxx'+ '&fields='+escape('{"title":true,"splash":true,"description":true,"source":true}')+ '&criteria='+escape('{"title": {"$regex":".*ar.*"}}'); 

這解決了我的問題