spring - ProjectionOperation plus和previousOperation聚合mongodb java
问题描述
Aggregation aggregation = newAggregation(
match(Criteria.where("moment").gte(from).lte(to)),
project("pass", "carrier", "route", "iso").and("iso").as("country")
.and("$moment").plus(14400000).as("shifted"),
project("shifted").and(DateOperators.DayOfMonth.dayOfMonth("$moment")).previousOperation(),
.andExpression("$moment").dateAsFormattedString("%Y-%m-%d").as("date"),
group("pass", "carrier", "route", "country","date").count().as("total"),
sort(Sort.Direction.DESC, "pass","total")
).withOptions(newAggregationOptions().
allowDiskUse(true).build());
我正在尝试在控制台中工作的java(mongodb和spring boot)中执行此查询(底部工作正常),但我未能将已经转移的正确日期(称为转移)传递给DateOperators.DayOfMonth。我得到投影字段不能为空,所以我认为我使用了错误的 previousOperation()。我应该如何正确使用这个previousOperation?或者我怎样才能正确地改变我需要的日期?非常感谢你。
db.billing.aggregate(
[
{
$match: { "moment": { "$gte": ISODate("2020-11-29T00:00:00Z"), "$lt": ISODate("2020-11-29T23:59:59Z")}}
},
{
$project: { "pass" :1, "carrier": 1, "moment" : { $subtract: ["$moment", 14400000 ] } }
},
{
$group: { "_id": {"pass": "$pass","carrier": "$carrier", "day": { "$dayOfMonth": "$moment"},"total": { "$sum": 1 }}}
},
{
$sort: {"_id.day":1}
}
]
)
解决方案
推荐阅读
- angular - Angular 8 - 表单构建器中的 For 循环
- kotlin - 使用默认参数不向函数传递值
- php - PHP数组获取父项值
- r - 在 RMarkdown 的 pander 表中渲染上标
- reactjs - 错误:元素类型无效:应为字符串或类/函数,但得到:未定义。导入错误
- entity-framework - 如何使用 LINQ/LAMBDA 更改表属性的值?
- gnu-make - Make:解析命令列表的尾部,就好像它们是 args 而不是附加规则?
- html - 了解不同字体大小的 CSS 换行
- sql-server - 这个 SQL 函数有什么作用?
- reactjs - 为什么 onClick 在某些情况下在 React 中不起作用?