Я использую этот синтаксис для фильтрации документов
const query = Model.find();
const filters = req.body;
if(filters.someValue){
query.find().where('someValue').eq(filters.someValie);
}
...(imagine 40 more)
, прежде чем выполнить этот запрос, чтобы найти все документы, я хочу отсортировать его по указанному c порядку, который я определю
if(filters.sort){
here the sort need to be applied - before execution.
}
Я получил некоторое поле в БД с четырьмя необязательными значениями, и я хочу прикрепить порядок к каждому значению (сортировка должна быть применена этим). Допустим, значения могут быть:
"A", "B", "C", "D"
порядок, в котором я хочу отсортировать документы:
{value:"A",order:3}, {value:"B", order:2}, {value:"C", order:4}, {value:"D", order:1}
и после применения сортировки - выполнить запрос. проблема в том, что я не мог ничего найти об этом в Интернете, и единственное, что я попробовал (Агрегировать с сортировкой и состоянием) - не сработало. код:
SomeModel.aggregate([
{ "$project" : {
"document": "$$ROOT",
"order" : {
"$cond" : {
if : { "$eq" : ["$someField", "D"] }, then : 1,
else : { "$cond" : {
"if" : { "$eq" : ["$someField", "B"] }, then : 2,
else : { "if" : { "$eq" : ["$someField", "A"]}, then: 3,
else : { "if" : { "$eq" : ["$someField", "C"]}, then: 4
}
}
}
}
}
}
}},
{"$sort" : {"order" : 1} }
]);