我正在针对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则不起作用。任何人都可以建议解决方法?非常感谢。
答案 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
答案 2 :(得分:0)
MongoDB的$and
运算符现在已经实现并且功能齐全。有关使用情况,请参阅http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24and,以便您的原始MongoDB.Driver.Builders.Query.And(qca);
现在可以使用。
[这可能太晚了,无法帮助原始海报,但从搜索中发现此问题的其他用户可能会受益]