gpt4 book ai didi

c# - 使用 MongoDB C# Driver 使用 Regex 查询编写 ElementMatch

转载 作者:IT老高 更新时间:2023-10-28 13:16:47 24 4
gpt4 key购买 nike

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

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

这样的过滤器执行此操作
  1. 包含,使用 .Contains()
  2. equals,考虑使用.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 .

关于c# - 使用 MongoDB C# Driver 使用 Regex 查询编写 ElementMatch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42138230/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com