sql >> Database teknologi >  >> NoSQL >> MongoDB

mongodb:bedste måde at få specifikke dokumenter og så resten

Der er ikke mange detaljer her, men jeg kan give et eksempel til overvejelse. Overvej følgende sæt dokumenter:

{ "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" }

Så antag, at du vil boble elementerne for brugerne "bill" og "ted" til toppen af ​​dine resultater, derefter alt andet sorteret efter user og color . Det du kan gøre er at køre dokumenterne gennem et $projekt trin samlet, som følger:

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 }}

])

Så det, der gør, er at betinget tildele en værdi til weight baseret på om user blev matchet til en af ​​de påkrævede værdier. Dokumenter, der ikke matcher, får blot en 0 værdi.

Når vi flytter denne modificerede dokument videre til $sort fase, den nye weight nøglen kan bruges til at sortere resultaterne, så de "vægtede" dokumenter er øverst, og alt andet vil derefter følge.

Der er en hel del ting, du kan gøre for at $project en vægt på denne måde. Se operatørens reference for mere information:

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




  1. Apache HBase-regionopdeling og sammenlægning

  2. Hvordan kører man mongo-kommando med mongo-go-driver?

  3. MongoDB - Slet et dokument

  4. mongodb:konvertering af objekt-id'er til BSON::ObjectId