MongoDB C# 查询在过滤时过滤省略非数字的字段

问题描述 投票:0回答:1

我在 MongoDB 中有带有“SSN”字符串字段的文档。它只能包含数字或带有连字符的数字,例如:

“123456789”

“12-345-6789”

“123-456789”

传入的过滤器参数只能以数字形式出现,例如。 “123456789”、“187641287”等。 如何构建过滤查询来查找这些记录?我的意思是“SSN”中的非数字字符应该被忽略,并且只有数字应该与过滤器参数进行比较。

我查看了Builders.Filter.Where,但看起来它不起作用,因为它接受表达式:

ssn ('123454784') // filter ssn value coming outside

Func<MyDocument, bool> ssnExpression() => doc =>
{
    var ssnOnlyDigits = doc.SSN ?? null;
    ssnOnlyDigits = string.IsNullOrEmpty(ssnOnlyDigits) ? null : Regex.Replace(ssnOnlyDigits, @"\D", string.Empty);
    return ssnOnlyDigits != null && ssnOnlyDigits.Equals(ssn);
};

return Builders<MyDocument>.Filter.Where(ssnExpression());

如有任何建议,我们将不胜感激。

附注我无法将仅包含数字的“SSN”存储到数据库中。

c# mongodb mongodb-.net-driver
1个回答
0
投票

@aneroid 建议这可以使用正则表达式来完成。在 C# 中,代码如下所示:

ssnValue // ssn filter value coming from outside
var regex = new BsonRegularExpression("^" + string.Join("-?", ssnValue.ToCharArray()) + "$");
var filter = Builders<MyDocument>.Filter.Regex(selector, regex);
© www.soinside.com 2019 - 2024. All rights reserved.