使用 MongoTemplate (spring) 转换 mongo 请求
Convert mongo request with MongoTemplate (spring)
我想转换此 mongodb 请求的一部分:
{
"$group": {
"_id": {
"instrument_name": "$instrument_name",
"interval":{
"$minute":{
$add:[new Date("1970-01-01"), "$date"]
}
}
}
}
}
使用 MongoTemplate 的聚合方法(spring)。
我的问题是间隔 属性。我想要 return 一分钟时间间隔的工具列表。
我尝试了很多解决方案,但无法解决部分问题:
"interval":{
"$minute":{
$add:[new Date("1970-01-01"), "$date"]
}
}
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("instrument_name").in(instruments)),
Aggregation.group("instrumentName", ???)),
Aggregation.project().andExpression("instrumentName").as("instrument_name")
);
你能帮帮我吗?
谢谢
您可以尝试先在投影操作中使用SpEL andExpression
投影间隔字段,然后在分组操作中按新字段分组:
// define epochDate here e.g DateTime epochDate = ...
Aggregation agg = newAggregation(
match(Criteria.where("instrument_name").in(instruments)),
project("instrument_name").and("date").plus(epochDate).as("interval"),
group(fields().and("instrument_name").and("interval")).count().as("count")
);
不知道能不能优化一下:
TypedAggregation<InstrumentModel> aggregation = Aggregation.newAggregation(InstrumentModel.class,
Aggregation.match(Criteria.where("instrument_name").in(instruments)),
Aggregation.project().and("instrumentName").as("instrument_name").and("time").plus(epoch).extractMinute().as("interval"),
Aggregation.group(Fields.fields().and("instrument_name").and("interval")).count().as("ticks")
);
但它有效
我想转换此 mongodb 请求的一部分:
{
"$group": {
"_id": {
"instrument_name": "$instrument_name",
"interval":{
"$minute":{
$add:[new Date("1970-01-01"), "$date"]
}
}
}
}
}
使用 MongoTemplate 的聚合方法(spring)。
我的问题是间隔 属性。我想要 return 一分钟时间间隔的工具列表。
我尝试了很多解决方案,但无法解决部分问题:
"interval":{
"$minute":{
$add:[new Date("1970-01-01"), "$date"]
}
}
Aggregation aggregation = Aggregation.newAggregation(
Aggregation.match(Criteria.where("instrument_name").in(instruments)),
Aggregation.group("instrumentName", ???)),
Aggregation.project().andExpression("instrumentName").as("instrument_name")
);
你能帮帮我吗?
谢谢
您可以尝试先在投影操作中使用SpEL andExpression
投影间隔字段,然后在分组操作中按新字段分组:
// define epochDate here e.g DateTime epochDate = ...
Aggregation agg = newAggregation(
match(Criteria.where("instrument_name").in(instruments)),
project("instrument_name").and("date").plus(epochDate).as("interval"),
group(fields().and("instrument_name").and("interval")).count().as("count")
);
不知道能不能优化一下:
TypedAggregation<InstrumentModel> aggregation = Aggregation.newAggregation(InstrumentModel.class,
Aggregation.match(Criteria.where("instrument_name").in(instruments)),
Aggregation.project().and("instrumentName").as("instrument_name").and("time").plus(epoch).extractMinute().as("interval"),
Aggregation.group(Fields.fields().and("instrument_name").and("interval")).count().as("ticks")
);
但它有效