Това като общо понятие се нарича "претегляне". Така че без да има друг механизъм, вие обработвате това логически в заявка на 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"
( if/then/else ) условие, при което първият аргумент е условен оператор, достигащ до булево true|false
. Ако true
"then" вторият аргумент се връща като резултат, в противен случай в отговор се връща "else" или трети аргумент.
В този "вложен" случай, когато "да" е съвпадение, тогава се присвоява определен резултат за "тегло", в противен случай преминаваме към следващия тест за условие, където когато "може би" е съвпадение, тогава се присвоява друг резултат, или в противен случай резултатът е 0
тъй като имаме само три възможности за съпоставяне.
След това $sort
условието се прилага, за да се "подредят" добре (в низходящ ред) резултатите с най-голямо "тегло" отгоре.