2013-04-12 78 views
3

我在MongoDB中的文件與正則表達式屬性MongoDB的反向正則表達式

{ 
     _id: ObjectId("516023189732da20ce000004"), 
     regex: /^(my|your)\s+regex$/ 
    } 

,我需要找回的東西,如db.col.find({regex: 'your regex'})db.col.find({regex: 'my regex'})這個文件。 在MySQL中,我會這樣做:SELECT * FROM table WHERE 'my regex' REGEXP table.regex。我如何在MongoDB中實現這一點?

+0

hnmm也許我失去了一些東西,但不會:'db.col.find({正則表達式:「/^[我|您的] \ s + regex $ /'})'工作,因爲它不是過時的引號,它不是一個正則表達式對象? – Sammaye

+0

這似乎是一個perl(ish)正則表達式。這意味着這不會匹配'我的正則表達式'或'你的正則表達式',但'正則表達式'或'正則表達式'或'|正則表達式&c。如果它必須與'我的正則表達式'相匹配,那麼它就是'/ ^(my | your)\ s + regex $ /'。我錯過了什麼嗎? – TrueY

+0

@TrueY你是對的,我用了錯誤的括號。 –

回答

6

可以使用$,其中運營商以下列方式:

db.col.find({$where: "\"my regex\".match(this.regex)"}) 
+0

雖然很慢,但它的工作原理,謝謝!但它也匹配'this.regex'沒有定義的文檔,所以我想我要定義一個函數而不是表達式。 –

+0

恐怕使用$哪裏總是很慢,Mon​​goDB文檔不鼓勵使用它...我也想知道更快的方法:)當然,您可以使用JavaScript函數爲$ where值來處理邊緣例如未定義的字段等 – fgalan

+0

在MongoDB JIRA中打開關於此改進的故障單https://jira.mongodb.org/browse/SERVER-13902 – fgalan