mongodb C# 驱动器查询与字符串字段包含在字符串参数中



mongodb data:

{
    name: "ccc"
}

C# 驱动器:

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

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

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

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

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

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

不过,我不相信您可以将BsonJavaScript对象与 LINQ 一起使用。您需要使用动态表达式生成器:

var results = collection.Find(match);

您可以使用正则表达式

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

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

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

相关内容

最新更新