提问者:小点点

使用MongoDB C#驱动程序编写带有Regex查询的ElementMatch


我需要使用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而不是i/batch/i处附加s

我怎么才能得到这个工作?我需要为过滤器做这个,比如

  1. 包含,使用。包含()
  2. 等于,考虑使用。Equals()
  3. 不包含,正在考虑使用!字段。包含(值)
  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 })

FYI:builder是过滤器定义

我的示例笔记收藏是这样的:

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

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

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

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

      }
   ]
}

共1个答案

匿名用户

听起来你缺少的只是麻木不仁的部分。你试过这个吗?

ToLS、ToLowerInVariant、ToUp、ToUpperInVariant(字符串方法)这些方法用于以不区分大小写的方式测试文档的字符串字段或属性是否与值匹配。

根据这里的1.1留档,它说这将允许执行大小写不敏感的正则表达式匹配。当前的留档没有提到它,所以为了确定,我检查了github,创建不敏感匹配的代码仍然存在。