MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

mongodb:najlepszy sposób na zdobycie konkretnych dokumentów, a potem resztę

Cóż, nie ma tu zbyt wielu szczegółów, ale mogę podać przykładowy przypadek do rozważenia. Rozważ następujący zestaw dokumentów:

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

Załóżmy więc, że chcesz bubble elementy dla użytkowników „rachunek” i „ted” u góry wyników, a następnie wszystko inne posortowane według user i color . To, co możesz zrobić, to uruchomić dokumenty przez $projekt etap łącznie w następujący sposób:

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

])

To, co robi, to warunkowe przypisanie wartości do weight na podstawie tego, czy user został dopasowany do jednej z wymaganych wartości. Dokumenty, które nie pasują, otrzymują po prostu 0 wartość.

Kiedy przenosimy ten zmodyfikowany dokument na $sort faza, nowa weight klucz może być użyty do uporządkowania wyników, tak aby „ważone” dokumenty były na górze, a wszystko inne nastąpi później.

Jest kilka rzeczy, które możesz zrobić, aby $project waga w ten sposób. Więcej informacji można znaleźć w instrukcji operatora:

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




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Pobierz listę przedmiotów, sprawdzając wiele wartości atrybutów w MongoDB w golang

  2. Przechowuj plik w GridFS Mongo za pomocą ExpressJS po przesłaniu

  3. $projekt w agregacji wyszukiwania

  4. Zapytanie o listę zawartą w innej liście w mongodb

  5. Groovy nie mógł znaleźć pasującego konstruktora?