这是文档结构
{
"_id" : ObjectId("6284f3eceae4fd4c3cfebb39"),
"Codes" : [
"Code 1",
"Code 2",
"Code 3"
]
}
我也有按预期工作的mongo查询
{ "Codes" : { "$elemMatch" : { "$regex" : /code/, $options: 'si' } } }
但是当我尝试使用 mongodb 驱动程序编写 C# 代码时
var filter = Builders<MyClass>.Filter
.ElemMatch(x => x.Codes,
Builders<string>.Filter.Regex(c => c, new BsonRegularExpression($"/^{codeFilter}/is")));
并执行这个过滤器定义我有一个例外
System.InvalidOperationException: '无法确定 c => c. 的序列化信息'
我的错误在哪里?如何创建过滤器定义以使用 $regex
运算符检查字符串数组项?
回答1
您为正则表达式生成器创建了错误的泛型类型:
Builders<MyClass>.Filter.ElemMatch(
x => x.Codes,
Builders<Codes>.Filter.Regex(
c => c.Code,
new BsonRegularExpression($"/code/", "si")));
其中实体结构是:
private class MyClass
{
public Codes[] Codes { get; set; }
}
private class Codes
{
public string Code { get; set; }
}