2015-04-25 162 views
0

我在DB查詢工作在mongo,我需要定期表達string場(fieldToQuery)來查詢該文檔的MongoDB的文檔。

數據結構就像

{ 
    fieldToQuery : "4052577300", 
    someOtherField : "some value", 
    ... 
    ... 
} 

我有這樣"804052577300"的值,使用它,我必須查詢上述文件。

如何實現相同的使用$ regex operator?

更新:

我需要做這樣結束與regex in mongo

回答

2

你可以做一種反向正則表達式查詢,在那裏你創建一個使用fieldToQuery值,然後測試正則表達式,對您的查詢值:

var value = "804052577300";   
db.test.find({ 
    $where: "new RegExp(this.fieldToQuery + '$').test('" + value + "');" 
}); 

$where運算符允許您針對集合中的每個文檔執行任意JavaScript;其中this是當前文檔,表達式的真實結果決定了文檔是否應包含在結果集中。

因此,在這種情況下,將爲每個文檔的fieldToQuery字段構建一個新的RegExp,並在末尾使用$將搜索錨定到字符串的末尾。然後調用正則表達式的test方法來測試value字符串是否與正則表達式匹配。

$where該字符串被評估服務器端,所以value的值必須通過直接包括它的值寫入$where串進行評估客戶端。

請注意,$where查詢可能會很慢,因爲它們不能使用索引。

+0

謝謝你在這方面的努力,一定會試一試,並會讓你知道。 如果你能給出簡短的解釋,那將會很棒。 **更新**:美麗,像一個魅力工作。 – Beast

+0

直到'新的RegExp'我明白了,我發現我們可以直接通過查看'this.fieldToQuery'來使用該字段,但在此之後就沒有什麼混淆了。 – Beast

+1

@Beast沒問題,我加了一些解釋;希望有所幫助。 – JohnnyHK

1

你可以做這樣的事情:

db.collection.find({ fieldToQuery: /4052577300$/}) 

上述正則表達式模式相當於SQL的LIKE操作:

select * from table where fieldToQuery like '%4052577300' => will return the document with the value "804052577300" 
+0

我說的值將是動態序列前綴與fieldToQuery中的數字。所以我可能有**「804052577300」**或**「8804052577300」**。 – Beast

相關問題