【发布时间】:2021-11-11 17:40:52
【问题描述】:
我有一个包含订单的集合,每个订单都有一个 int32 类型的 OrderId 字段。我想过滤收集并获取 OrderId 包含的所有订单,例如123。例如,以下 OrderId 必须匹配:
- 123
- 9912399
- 99123
以下原始 mongo 过滤器有效:
{ $where: "/^.*123.*/.test(this.OrderId)" }
这如何在 C# Mongo 客户端或其他可以完成这项工作的东西中表达?
我无法使用下面的代码,因为它似乎只适用于字符串字段:
Builders<Order>.Filter.Regex(x => x.OrderId, new BsonRegularExpression("123"))
【问题讨论】:
-
你试过
Builders<Order>.Filter.Regex(x => x.OrderId, new BsonRegularExpression("/^.*123.*/"))吗? -
是的,这变成了
{ "OrderId" : /^.*123*/ },它不适用于int32字段。如果我将字段类型更改为string,该过滤器确实有效,但不适用于int32。 -
尝试解析原始字符串:
var filter = BsonDocument.Parse(@"{ $where: ""/^.*123.*/.test(this.OrderId)"" }"); -
在某个时候。您将需要在字符串级别进行比较。数字中间的 123 在技术上不是数值。您可以使用聚合管道创建一个两阶段聚合 - 第一阶段是将数字转换为字符串,第二阶段对字符串值执行 regex()。
-
这可能会有所帮助
https://stackoverflow.com/questions/34184764/filter-with-regex-mongodb-c-sharp-driver?noredirect=1&lq=1