sql >> Databáze >  >> NoSQL >> MongoDB

Seřadit položku podle hodnoty mongodb

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.




  1. chyba v monogdb errmsg:WiredTigerIndex::insert:klíč je příliš velký na indexování, selhává

  2. Mongo agregované vnořené pole

  3. Limit hromadného vkládání Mongodb v Pythonu

  4. Chyba aktualizace MongoDB 2.6