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 Date
以2019-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 驱动程序进行比较
使用 MongoDB .Net 驱动程序对存储在文档字段中的数组进行分页