2017-02-09 66 views
8

我需要使用MongoDB的C#驱动使用MongoDB的C#驱动程序写入与正则表达式查询ElementMatch

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)) 

查询它产生蒙戈查询作为

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

如果您发现它在/batch/s而不是i /batch/i

我该如何获得这项工作?我需要这样做的过滤器一样

  1. 包含,使用。载有()
  2. 等于,使用.Equals的思考()
  3. 不含,使用的思维!Field.contains(值)
  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: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, 

     } 
    ] 
} 

回答

1

这听起来像你所缺少的是不敏感的p艺术。你试过这个吗?

ToLower将,ToLowerInvariant,ToUpper的,ToUpperInvariant(字符串方法) 这些方法用于测试文档是否一个字符串字段或属性 在不区分大小写的方式一个值匹配。

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

+0

不敏感的部分是一个,我也需要写查询,其中文本开始,文本结束与文本不包含。我想我只能用BsonRegularexpression来做这些事情? – HaBo

+0

对不起,我错过了这个问题的一部分。 mongo驱动程序将正确处理'String.StartsWith()'和'String。EndsWith()',将它们分别转换为'/ ^'和'$ /'。它也应该把一个不是'!'变成一个mongo'$ not:{}' – Taekahn

+0

怎么样“不包含”搜索? – HaBo