对于字符串arg,包含字符串字段的mongodb C#驱动程序查询

时间:2014-02-25 15:40:47

标签: c# mongodb

mongodb数据:

{
    name: "ccc"
}

C#drive:

string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
            where arg.Contains(d.name)
            select d;

我知道这是不可能的。 我该怎么办?

3 个答案:

答案 0 :(得分:2)

鉴于查询的性质,Mongo需要访问集合中的每个文档并执行可能很昂贵的操作。

当您尝试以不受支持的方式执行包含匹配时,您无法有效地使用正则表达式。您正在尝试查询字段中的任何给定值是否包含在字符串中。你只能传递一个模式。所以,如果你知道它总是一组特定的字符或以某种方式,你需要编写一个专门寻找它的表达式。鉴于您的样本,这可能是不可能的。

您可以通过构建JavaScript来使用$where运算符:

var arg = "xxx ccc vvvv";
var match = Query.Where(new BsonJavaScript("' + arg + '.indexOf(this.Name) > -1"));

我不相信你可以使用LINQ的BsonJavaScript对象。您需要使用动态表达式构建器:

var results = collection.Find(match);

答案 1 :(得分:0)

您可以使用正则表达式

var regex = new Regex("xxx ccc vvvv");
var query =
    from d in collection.AsQueryable<AAA>()
    where regex.IsMatch(d.Name)
    select d;

答案 2 :(得分:0)

将字符串拆分为单个值数组,以使LINQ能够使用$in高效执行查询:

string arg = "xxx ccc vvvv";
var match = from d in collection.AsQueryable<AAA>()
            where arg.Split().Contains(d.name)
            select d;