使用 MongoDB C# 驱动程序编写带有正则表达式查询的 ElementMatch

Using MongoDB C# Driver write ElementMatch with Regex query

我需要使用 MongoDB C# 驱动程序构建以下查询

db.Notes.find({ "Group._id" : 74, "CustomFields" : { "$elemMatch" : { "Value" : /batch/i } }, "IsDeleted" : false }).sort({ "CreatedDateTimeUtc" : -1 })

我使用了这样的查询

builder.ElemMatch(x => x.CustomFields, x => x.Value.Contains(filterValue))

它生成 mongo 查询为

db.Notes.find({ "Group._id" : 74, "CustomFields" : { "$elemMatch" : { "Value" : /batch/s } }, "IsDeleted" : false }).sort({ "CreatedDateTimeUtc" : -1 })

如果您注意到它在 /batch/s 处附加 s 而不是 i /batch/i

我怎样才能得到这份工作?我需要为

这样的过滤器执行此操作
  1. 包含,使用.Contains()
  2. 等于,考虑使用.Equals()
  3. 不包含,想用!Field.contains(value)
  4. 不等于
  5. 开头为
  6. 结尾为

我可以做这样的事情吗,这样我就可以将我的所有正则表达式模式应用于上述所有过滤器。

builder.Regex(x => x.CustomFields[-1].Value, new BsonRegularExpression($"/{filterValue}/i"));

这会将查询转换为如下所示,但不会得到任何结果

db.Notes.find({ "Project._id" : 74, "CustomFields.$.Value" : /bat/i, "IsDeleted" : false }).sort({ "CreatedDateTimeUtc" : -1 })

仅供参考:builderFilterDefinition<Note>

我的示例笔记集是这样的:

{  
   Name:"",
   Email:"",
   Tel:"",
   Date:02   /21/1945,
   CustomFields:[  
      {  
         Name:"",
         Value:"",
         IsSearchable:true,

      },
      {  
         Name:"",
         Value:"",
         IsSearchable:true,

      },
      {  
         Name:"",
         Value:"",
         IsSearchable:true,

      },
      {  
         Name:"",
         Value:"",
         IsSearchable:true,

      }
   ]
}

听起来你所缺少的只是不敏感的部分。你试过这个吗?

ToLower, ToLowerInvariant, ToUpper, ToUpperInvariant (string method) These methods are used to test whether a string field or property of the document matches a value in a case-insensitive manner.

根据 1.1 文档 here,它表示将允许执行不区分大小写的正则表达式匹配。 当前文档没有提到它,所以为了确定,我检查了 github 并且创建不敏感匹配的代码仍然是 there.