Warunkowe rozwijanie w agregacji MongoDb?
Próbuję dowiedzieć się, czy istnieje sposób na kod warunkowego odwinięcia w strukturze agregacji MongoDB.
Mam takie polecenie agregacji:
models.Users.aggregate(
{ // SELECT
$project : { "sex" : 1,
"salesIndex":1
}
},
{ // WHERE
$match: {"salesIndex": {$gte: index}}
},
{ // GROUP BY y agregadores
$group: {
_id : "$sex",
sexCount : { $sum: 1 }
}
},
{ $sort: { sexCount: -1 } }
, function(err, dbres) {
(...)
});
Chciałbym dodać opcjonalny filtr według działu. Użytkownik może znajdować się w jednym lub kilku działach, oto jak wygląda to w db:
użytkownicy _id sex salesIndex działy {[d1, d2, d3]}
Gdybym chciał wyszukać użytkowników w określonym dziale, kodowałbym klauzulę $ unwind, a następnie dopasowanie $ według działu. Jednak chciałbym użyć tego samego polecenia agregacji dla obu scenariuszy, coś takiego:
models.Users.aggregate(
{ // SELECT
$project : { "sex" : 1,
"salesIndex":1
}
},
{ // WHERE
$match: {"salesIndex": {$gte: index}}
},
IF (filteringByDepartment){
$unwind departments here
$match by departmentId here
}
{ // GROUP BY y agregadores
$group: {
_id : "$sex",
sexCount : { $sum: 1 }
}
},
{ $sort: { sexCount: -1 } }
, function(err, dbres) {
(...)
});
Czy to w ogóle możliwe, czy potrzebuję 2 komend agregujących?