Команда,Весовые данные Совокупный запрос
Я новичок в данных Spring для mongodb. Я пытаюсь узнать код данных Spring для запроса агрегации. но в большинстве уроков показаны только простые примеры. Могли бы вы , пожалуйста, помогите мне построить весенний код данных для данного сложного агрегатного примера.
SCHEMA:
{
"s" : "CB",
"c" : "REQ_RCV",
"e" : "cta_sms_click",
"st" : "i",
"b" : "UB",
"a" : "account-1",
"u" : "b1_h1_d1_m1_user_2",
"c#" : "b1_h1_d1_m1_cr-2",
"@" : ISODate("2016-10-01T06:03:00.000Z"),
"@h" : "16100106",
"@d" : "161001",
"@m" : "1610"
}
QUERY:
db.COLLECTION_NAME.aggregate([
{$match:{"st":"i","@":{$gte : new ISODate("2015-10-01T06:00:00Z"), $lte : new ISODate("2017-10-02T10:00:00Z")}, "c":"REQ_RCV"}},
{$group:{_id:{"b":"$b", "HOURLY":"[email protected]"}, count:{$sum:1}}},
{$project : {_id:0, "BUCKET":"$_id.b", "TIME":"$_id.HOURLY", count:1}},
{$sort:{"BUCKET":1, "TIME":1}}
]);
Сложность:
- $ матча Muliple из условий
- $ Проекта имеет доступ к внутренней области группы под _id
- Результат не может быть отображен в класс, так как она меняется основанный на изменении полей проекта. В конечном итоге я бы хотел бы сопоставить его с java.util.HashMap, чтобы я мог поместить любые поля внутри $ project. Это возможно?
Первоначальный ответ от Veeram для справки:
Aggregation agg = newAggregation(match(where("st").is("i").and("@").gte(start_date).lte(end_date).and("c").is("REQ_RCV")),
group(fields("b").and("HOURLY", "[email protected]")).count().as("count"),
project(fields("count").and("BUCKET","$_id.b").and("TIME", "$_id.HOURLY")),
sort(ASC, "BUCKET", "TIME"));
@chridam Не могли бы вы помочь мне здесь? –