Dit als algemeen concept wordt "weging" genoemd. Dus zonder enig ander mechanisme, handel je dit logisch af in een MongoDB-query door de waarden voor het "gewicht" logisch in het document te "projecteren".
Uw methode voor het "projecteren" en wijzigen van de velden in uw document is de .aggregate()
methode, en in het bijzonder is het $project
pijplijnfase:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
De $cond
operator hier is een "ternary"
( if/then/else ) voorwaarde waarbij het eerste argument een voorwaardelijke instructie is die aankomt op boolean true|false
. Indien true
"then" wordt het tweede argument geretourneerd als het resultaat, anders wordt het "else" of derde argument als antwoord geretourneerd.
In dit "geneste" geval, waar "ja" een overeenkomst is, wordt een bepaalde "gewichtsscore" toegekend, anders gaan we verder met de volgende conditietest waarbij wanneer "misschien" een overeenkomst is, dan wordt een andere score toegekend, of anders is de score 0
omdat we maar drie mogelijkheden hebben om te matchen.
Dan de $sort
voorwaarde wordt toegepast om de resultaten met het grootste "gewicht" bovenaan te "ordenen" (in aflopende volgorde).