1

我正在针对 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 则无法正常工作。任何人都可以提出解决方法吗?非常感谢。

4

3 回答 3

0

MongoDB 的$and操作符现在已经实现并且功能齐全。有关用法,请参见http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-%24andMongoDB.Driver.Builders.Query.And(qca); ,因此您的原始文件现在应该可以工作了。

[这可能对原始发布者有所帮助为时已晚,但从搜索中找到此问题的其他用户可以受益]

于 2012-05-03T16:16:13.543 回答
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

请参阅正则表达式以匹配所有搜索词

于 2011-05-18T07:56:50.730 回答
0

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

于 2011-05-18T04:19:05.600 回答