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

mongodb:nejlepší způsob, jak získat konkrétní dokumenty a pak zbytek

Není zde mnoho podrobností, ale mohu uvést příklad případu ke zvážení. Zvažte následující sadu dokumentů:

{ "user" : "fred", "color" : "black" }
{ "user" : "bill", "color" : "blue" }
{ "user" : "ted", "color" : "red" }
{ "user" : "ted", "color" : "black" }
{ "user" : "fred", "color" : "blue" }
{ "user" : "bill", "color" : "red" }
{ "user" : "bill", "color" : "orange" }
{ "user" : "fred", "color" : "orange" }
{ "user" : "ted", "color" : "orange" }
{ "user" : "ally", "color" : "orange" }
{ "user" : "alice", "color" : "orange" }
{ "user" : "alice", "color" : "red" }
{ "user" : "bill", "color" : "purple" }

Předpokládejme tedy, že chcete bublinat položky pro uživatele „účtovat“ a „tedy“ na začátek vašich výsledků, pak vše ostatní seřazené podle user a color . Co můžete udělat, je spustit dokumenty prostřednictvím $projektu etapa v souhrnu takto:

db.bubble.aggregate([

    // Project selects the fields to show, and we add a weight value
    {$project: {
        _id: 0,
        "user": 1,
        "color": 1,
        "weight": {$cond:[
            {$or: [
                {$eq: ["$user","bill"]},
                {$eq: ["$user","ted"]}
            ]},
            1,
            0
         ]}
     }},

    // Then sort the results with the `weight` first, then `user` and `color`
    {$sort: { weight: -1, user: 1, color: 1 }}

])

Takže to znamená podmíněně přiřadit hodnotu weight podle toho, zda user byla přiřazena k jedné z požadovaných hodnot. Dokumentům, které se neshodují, je jednoduše přiřazena 0 hodnotu.

Když to přesuneme upraveno dokument na $sort fázi, novou weight klíč lze použít k seřazení výsledků, takže "vážené" dokumenty budou nahoře a vše ostatní bude následovat.

Existuje několik věcí, které můžete udělat pro $project váhu tímto způsobem. Další informace naleznete v příručce operátora:

http://docs.mongodb.org/manual/reference/operator/aggregation/




  1. MongoError:Nejsou ověřeni žádní uživatelé

  2. MongoDB $setEquals

  3. Aktualizace meteorologické sbírky s tradičním id

  4. Vložte soubor json do mongodb