Agregacja MongoDB - grupowanie danych
Mam kolekcję MongoDB zawierającą dane o aktywności użytkownika (typ aktywności) i chciałbym pogrupować działania na dwie grupy i zwrócić liczbę działań.
Kolekcja wygląda mniej więcej tak (są też inne pola jak data itp.):
{"userID": 1, "activity": "reading"}
{"userID": 1, "activity": "sleeping"}
{"userID": 1, "activity": "hiking"}
{"userID": 1, "activity": "sleeping"}
{"userID": 1, "activity": "biking"}
Chcę zrobić agregację, która zwróci liczbę wielu zgrupowanych działań, np. Chciałbym pogrupować „wędrówki” i „jazda na rowerze” jako „rekreacja”, a „spanie” i „czytanie” jako „odpoczynek”, a następnie liczbę czynności od wybranej daty dla określonego użytkownika:
"recreation": 2
"resting": 3
Co zrobiłem było dopasować userIDi date $gteuzyskać wszystkie zajęcia dla wybranego użytkownika i okres, próbuje liczenia $sum, $projectale nie mógł dostać się do pracy, jak oczekiwano.
Dzięki!
Odpowiedzi
Możesz używać $groupz$cond
[
{
$group: { _id: "$userID",
recreation: {
$sum: { $cond: [
{
$or: [ {$eq: ["$activity","hiking"]}, {$eq: ["$activity","biking"]} ] }, 1, 0 ] } }, resting: { $sum: {
$cond: [ { $or: [
{$eq: ["$activity","sleeping"]},
{$eq: ["$activity","reading"]}
]
},
1,
0
]
}
}
}
}
]
Działający plac zabaw Mongo