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

时间:2017-02-09 13:38:49

标签: c# mongodb mongo-shell

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

Policyfile

我使用了像这样的查询

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

它生成了mongo查询

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

附加了s

我怎样才能完成这项工作?我需要为

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

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

    /batch/i

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

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

    我的示例Notes Collection是这样的:

    FilterDefinition<Note>

1 个答案:

答案 0 :(得分:1)

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

  

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

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