2011-05-17 76 views
1

我對MongoDB集合運行搜索短語。我的短語可能有一個以上的詞,例如搜索'pete smit'。因此我需要使用正則表達式來提供'起始'功能。因此,我創建了Query.Matches查詢數組,將它們添加到QueryComplete數組中,然後使用Query.And來運行它們。MongoDB Query.And不支持匹配

代碼如下:

// searchTerm will be something like 'pete smit' 
string[] terms = searchTerm.Split(' '); 

MongoDB.Driver.Builders.QueryComplete[] qca; 
qca = new MongoDB.Driver.Builders.QueryComplete[terms.Length]; 
for (int i = 0; i < terms.Length; i++) 
{ 
    regex = "/(\\b" + terms[i] + ")+/i"; // Good, but only single term (\b is start of word) 
    qca[i] = MongoDB.Driver.Builders.Query.Matches("companyname", regex); 
} 
//MongoDB.Driver.Builders.QueryComplete qry = MongoDB.Driver.Builders.Query.Or(qca); // This works 
MongoDB.Driver.Builders.QueryComplete qry = MongoDB.Driver.Builders.Query.And(qca); // This fails 

上執行的Query.And我得到一個錯誤,指出:

Query.And does not support combining equality comparisons with other operators (field: 'companyname') 

它,如果我使用Query.Or工作正常,但不工作如果我使用Query.And。任何人都可以提出一個解決方法?非常感謝。

回答

0

直到MongoDB支持$和傳遞給Query.And的所有子查詢必須針對不同的字段(因此您不能將不同的正則表達式應用於同一個字段)。

+0

謝謝。任何想法,當MongoDB將支持$和? – Journeyman 2011-05-18 07:31:45

+1

https://jira.mongodb.org/browse/SERVER-1089 – 2011-05-18 16:41:20

0

解決方法是封裝多個搜索詞在一個單一的正則表達式如下:

string[] terms = searchTerm.Split(' '); 
regex = "/"; 
for (int i = 0; i < terms.Length; i++) 
{ 
    regex += "(?=.*\\b" + terms[i] + ")"; 
} 
regex += ".*/i"; 
MongoDB.Driver.Builders.QueryComplete query = MongoDB.Driver.Builders.Query.Matches("companyname", regex); // The^matches the start of the string 

Regular expression to match all search terms