mongodb - 用于日期比较的 mongodb 过滤器
问题描述
从 Spring Boot 应用程序中,我正在查询 mongodb 集合以找出特定日期的活动协议。数据没有变化,有 31 个独特的协议。当我过去 7 天运行它时,它给了我 5 天的正确计数,但是昨天和今天它给了我 30 的计数。实际上所有收集的协议都是有效的。有多个具有相同协议 ID 的文档 - 删除我使用分组的重复项。我的代码是这样的:
public int getTotalActivePAsORActiveItemsByDate(LocalDate date1) {
String collectionName = Constants.AGREEMENT_COLLECTION_NAME;
final List<Bson> pipeline = new ArrayList<>();
Bson q1 = match(Filters.and(Filters.eq("agreementStatus", "Active")));
pipeline.add(q1);
if(date1 != null) {
Bson q2 = match(and(lte("validFromDate", date1), gte("validToDate", date1)));
pipeline.add(q2);
}
String project = "{$project:{agreementId:1, " + "validFromDate:1, " + "validToDate: 1 " + "}}";
pipeline.add(BasicDBObject.parse(project));
String addUpStr = "{$group:{" + "_id:'$agreementId', " + "count :{'$sum':1} " + "}}";
pipeline.add(BasicDBObject.parse(addUpStr));
String cntStr = "{$group:{_id:null, val:{'$sum':1}}}";
pipeline.add(BasicDBObject.parse(cntStr));
MongoDatabase mongo = mongoTemplate.getDb();
final AggregateIterable<Document> ret = mongo.getCollection(collectionName).aggregate(pipeline);
int val = 0;
try {
val = ret.first().getInteger("val");
} catch (final Exception e) {
e.printStackTrace();
}
return val;
}
和一个样本文件:
{_id=600ae734d752d67e519a34b6,
agreementStatus=Active,
validFromDate=Wed Oct 01 05:30:00 IST 2014,
validToDate=Sun Mar 31 05:30:00 IST 2024,
agreementId=VPC_BF_NW_Hu_LU70_NSO_MULT_400002129_D57E911804B9
}
整个问题源于日期。mongodb 在日期比较中失败了吗?
解决方案
推荐阅读
- canopy - Canopy 编辑器:错误没有名为 pyspark 的模块
- jmeter - JMeter - 如何在所有测试计划线程都通过时设置变量
- jenkins - 如何使用 Trac 通知功能触发 jenkins 作业?
- c# - C# XCeed 通过代码动态创建 PropertyGrid
- jquery - 在 jquery 中使用 localstorage 时 .css 不是函数错误
- algorithm - 如何找到两个素数 p 和 q,其中 p 和 q 足够大并且 q 整除 p - 1?
- python - 按值对python中的嵌套字典进行排序
- elixir - Elixir - 更新具有字符串键的地图
- c# - C++ 指针与 C# 指针
- angular-material - 垫子扩展面板在垫子选项卡中无法正常工作