MongoDB Query.And不支持匹配

时间:2011-05-17 21:20:19

标签: mongodb mongodb-.net-driver

我正在针对MongoDB集合运行搜索短语。我的短语中可能包含多个术语,例如搜索'pete smit'。因此,我需要使用正则表达式来提供“启动”功能。因此,我创建了一个Query.Matches查询数组,将它们添加到QueryComplete数组,然后使用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则不起作用。任何人都可以建议解决方法?非常感谢。

3 个答案:

答案 0 :(得分:0)

直到MongoDB支持$并且所有子查询都传递给Query.And必须用于不同的字段(因此你不能将不同的正则表达式应用于同一个字段)。

答案 1 :(得分: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

答案 2 :(得分:0)

MongoDB的$and运算符现在已经实现并且功能齐全。有关使用情况,请参阅http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and,以便您的原始MongoDB.Driver.Builders.Query.And(qca);现在可以使用。

[这可能太晚了,无法帮助原始海报,但从搜索中发现此问题的其他用户可能会受益]