java - java中的mongodb,如何在聚合函数中使用日期范围
问题描述
我有以下代码用于根据性别进行过滤,然后根据employee_id 进行分组,以及一个额外的字段,用于计算总天数。
collection.aggregate(
Arrays.asList(
Aggregates.match(Filters.eq("$sex","male")),
Aggregates.group("$employee_id", sum("total", "$days")),
)
).forEach(printBlock);
在此查询中,如何添加要匹配的日期范围,例如 - 大于 (some date) 和 less than (some date) 。这也是在 java.util.Date 或其他东西中使用的正确日期格式。我发现了类似的问题,但在 2020 年没有发现可能有更新的部分以更简单的方式执行此操作。还有一种方法可以生成没有这种格式的查询,只需按日期范围过滤并按某个值分组。
the json example
{
"employee_id": "GX078333",
"sex": "male",
"days": 5,
"date": {
"$date": "2020-06-01T07:33:50.796Z"
},
}
解决方案
Filters.and(Bson, Bson, ...)
您可以使用或引用匹配多个值Filters.and(List<Bson>)
我希望您知道日期必须是日期的数组/列表。
所以,提供一个例子。cDateRang
是ArrayList
与您的 Dates 应该匹配的。
例如
ArrayList<Date> cDateRange = new ArrayList<>();
cQueryFields.add(Filters.in("date.mydatearray", cDateRange));
//
Bson cQuery = Filters.and(cQueryFields);
//
ArrayList<Bson> cQueryList = new ArrayList<>();
cQueryList.add(Aggregates.match(cQuery));
//
cQueryList.add(Aggregates.match(cQuery));
AggregateIterable<Document> cResult = cMongoDatabase.getCollection("your collection Name").aggregate(pFilter)
推荐阅读
- java - Spring Boot:在 Runnable 静态线程中访问 Autowired 组件
- python - 在 Python 模块中使用 InstaLoader
- javascript - 如何在 svelte 中向窗口事件/鼠标滚轮添加参数
- java - 如何格式化打印整数,以便小数点左侧的所有位都对齐?
- javascript - highcharts 饼图为每个部分应用一个模态
- html - 试图找到一种方法在 CSS 中的 div 类中居中多个元素
- http - Prolog:process_create 在 http_handler 中不起作用
- php - 如何使用带有 PHP 的单选按钮将某些信息上传到我的数据库?
- python - 接受生日列并返回星座的 Python 函数
- javascript - 在 Rails 应用程序中使用外部脚本时出现 Javascript 空错误