Dette som et generelt begreb kaldes "vægtning". Så uden nogen anden mekanisme på plads, så håndterer du dette logisk i en MongoDB-forespørgsel ved at "projicere" værdierne for "vægten" logisk ind i dokumentet.
Din metode til at "projicere" og ændre felterne i dit dokument er .aggregate()
metode, og specifikt er det $project
pipeline fase:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
$cond
operatør her er en "ternær"
( if/then/else ) betingelse, hvor det første argument er et betinget udsagn, der kommer til boolsk true|false
. Hvis true
"så" returneres det andet argument som resultatet, ellers returneres "andet" eller det tredje argument som svar.
I dette "indlejrede" tilfælde, hvor "ja" er et match, så tildeles en bestemt "vægt"-score, ellers går vi videre til den næste tilstandstest, hvor når "måske" er et match, så tildeles en anden score, eller ellers er scoren 0
da vi kun har tre muligheder at matche.
Derefter $sort
betingelse anvendes for at "ordne" (i faldende rækkefølge) resultaterne med den største "vægt" ovenpå.