Mongodb驱动程序中的BsonRegularExpression不返回所需的值

Posted

技术标签:

【中文标题】Mongodb驱动程序中的BsonRegularExpression不返回所需的值【英文标题】:BsonRegularExpression in Mongodb driver doesn't return desired value 【发布时间】:2020-01-07 07:07:52 【问题描述】:

假设我有一个名为 GSCDB 的数据库和一个名为 GSCALogs 的集合,每个文档看起来像:


    "_id": "5d6f514c19038b8b38aec8d7",
    "SHA-256": "839c95cb99e8243d762ccb6f33ed8e1550b6848f739556e71dc8bcf684a159c5",
    "File Name": "Settings.settings",
    "Start Job Date": "2019-09-04T05:53:43.397Z"

我想知道有多少文档有Start Job Date2019-09 开头

现在我有:

IMongoDatabase db = dbClient.GetDatabase("GSCADB");
var collection = db.GetCollection<BsonDocument>("GSCALogs");
var filter = Builders<BsonDocument>.Filter.Regex("Start Job Date", new BsonRegularExpression("^(2019-09)"));
var countedDocuments = collection.Find(filter).ToList();
MessageBox.Show(countedDocuments.Count.ToString());

但它总是打印0,我错过了什么?

【问题讨论】:

您是否尝试过使用 mongo shell 或一些客户端程序先尝试针对 mongo 的查找?另请注意:您可以调用 .Count(filter) 以便 mongo 为您计算元素,而不是检索所有提升内存结构和计数的文档 @PabloRecalde 文件存在,在MongoDB Compass可以看到 @PabloRecalde 我会接受.Count(filter) 的建议.. 是的,但是您是否尝试过像在 c# 代码中那样使用正则表达式过滤器来查询它? 【参考方案1】:

你可以使用这个 mongodb 查询来获取你的输出

db.getCollection('GSCALogs').find( 开始工作日期: $regex: new RegExp('^.' + "2019-09" + '.', 'i ') ).count()

它将返回“开始工作日期”为“2019-09”的实际计数

【讨论】:

【参考方案2】:

我想出了什么问题,在将日期作为字符串写入数据库后,它被保存为日期时间而不是字符串:

...
var filter = Builders<BsonDocument>.Filter.Regex("Start Job Date", new BsonRegularExpression("^(2019-09)","i"));
var countedDocuments = collection.Find(filter).ToList();
MessageBox.Show(countedDocuments.Count.ToString());

【讨论】:

以上是关于Mongodb驱动程序中的BsonRegularExpression不返回所需的值的主要内容,如果未能解决你的问题,请参考以下文章

将 Mongodb 中的日期与 C# LINQ 驱动程序进行比较

带有 NoRM 驱动程序的 MongoDb 中的多态性问题

mongodb节点驱动程序中的$sum聚合

使用 MongoDB .Net 驱动程序对存储在文档字段中的数组进行分页

Mongodb驱动程序中的BsonRegularExpression不返回所需的值

将 Kafka 连接 MongoDB 连接器注册为 SCDF 中的应用程序