Это, как общая концепция называется "весовой". Таким образом, без какого-либо другого механизма на месте, вы логически обрабатываете это в запросе MongoDB путем «прогнозирования» значений для «веса» в документе логически.
Ваш метод «проектирование» и изменения полей присутствуют в вашем документе, является .aggregate()
метод, а именно это этап $project
трубопровода:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
$cond
оператор здесь является "ternary" (если/то/другое) Условие, где первый аргумент является условным статусом, прибывающим в boolean true|false
. Если true
«then», в качестве результата возвращается второй аргумент, иначе в ответ возвращается «else» или третий аргумент.
В этом «вложенном» случае, когда «да» является совпадением, назначается определенный «вес», иначе мы переходим к следующему критерию условия, когда «возможно» является совпадением, а затем оценка или иначе оценка равна 0
, так как у нас есть только три возможности для сопоставления.
Тогда условие $sort
применяется для того, чтобы «заказать» (в порядке убывания) результаты с наибольшим «весом» сверху.