Ta ogólna koncepcja nazywa się „ważeniem”. Tak więc bez żadnego innego mechanizmu, wtedy obsługujesz to logicznie w zapytaniu MongoDB, logicznie "odwzorowując" wartości dla "wagi" na dokument.
Twoja metoda „rzutowania” i zmieniania pól obecnych w dokumencie to .aggregate()
metoda, a konkretnie jest to $project
etap potoku:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
$cond
operator tutaj to "trójargument"
( if/then/else ) warunek, w którym pierwszy argument jest instrukcją warunkową przychodzącą do wartości logicznej true|false
. Jeśli true
"wtedy" drugi argument jest zwracany jako wynik, w przeciwnym razie w odpowiedzi zwracany jest "else" lub trzeci argument.
W tym „zagnieżdżonym” przypadku, gdy „tak” jest dopasowaniem, przypisywany jest określony wynik „wagi”, w przeciwnym razie przechodzimy do następnego testu warunków, w którym jeśli „może” jest dopasowaniem, przypisywany jest kolejny wynik, lub w przeciwnym razie wynik to 0
ponieważ mamy tylko trzy możliwości do dopasowania.
Następnie $sort
warunek jest stosowany w celu „uporządkowania” (w kolejności malejącej) wyników z największą „wagą” na górze.