Toto jako obecný koncept se nazývá „vážení“. Takže bez jakéhokoli jiného mechanismu to zpracujete logicky v dotazu MongoDB tak, že hodnoty pro "váhu" logicky "promítnete" do dokumentu.
Vaše metoda pro "promítání" a změnu polí přítomných ve vašem dokumentu je .aggregate()
a konkrétně je to $project
fáze potrubí:
db.collection.aggregate([
{ "$project": {
"getthisfirst": 1,
"weight": {
"$cond": [
{ "$eq": [ "$getthisfirst", "yes" ] },
10,
{ "$cond": [
{ "$eq": [ "$getthisfirst", "maybe" ] },
5,
0
]}
]
}
}},
{ "$sort": { "weight": -1 } }
]);
$cond
operátor zde je "ternární"
( if/then/else ) podmínka, kde první argument je podmíněný příkaz, který se dostane na logickou hodnotu true|false
. Pokud true
"pak" je jako výsledek vrácen druhý argument, jinak je jako odpověď vrácen argument "else" nebo třetí.
V tomto „vnořeném“ případě, kde „ano“ je shoda, je přiřazeno určité „váhové“ skóre, jinak přejdeme k dalšímu kondičnímu testu, kde když „možná“ je shoda, je přiřazeno další skóre, nebo jinak je skóre 0
protože máme pouze tři možnosti k porovnání.
Poté $sort
podmínka se použije za účelem, dobře "uspořádat" (v sestupném pořadí) výsledky s největší "váhou" nahoře.