Я пытаюсь выяснить, есть ли способ закодировать условное выражение в структуре агрегации MongoDB.Условный отдых в агрегации MongoDb?
У меня есть команда агрегации, как это:
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) {
(...)
});
Я хотел бы добавить дополнительный фильтр по отделам. Пользователь может находиться в одном или нескольких отделов, вот как это выглядит в БД:
пользователя _id секс salesIndex отделов {[d1, d2, d3]}
Если бы я хотел поиск пользователей в определенном отделе, я бы закодировал предложение $ unwind, а затем $ match по отделу. Однако я хотел бы использовать ту же команду агрегации для обоих сценариев, что-то вроде этого:
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) {
(...)
});
Возможно ли это вообще, или мне нужно 2 команды агрегации?
Это звучит, как заставка, не знаю, что вы могли бы сделать это так. Спасибо! –
Что делать, если условие if находится внутри документа? –