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

jak posortować tablicę obiektów według dowolnej listy w mongo

Możesz spróbować uruchomić niestandardową funkcję porównawczą z natywnym JavaScriptem sort() metoda na tablicy zwróconej z cursor.toArray() metoda:

var order = ["food", "coffee", "grocery"];
var docs = db.collection.find().toArray().sort(function(a, b) { 
    return order.indexOf(a.category) - order.indexOf(b.category);
});
printjson(docs);

Przykładowe wyjście

[
    {
        "_id" : "4JW7miNITl",
        "category" : "food"
    },
    {
        "_id" : "4Je4kmrrbZ",
        "category" : "coffee"
    },
    {
        "_id" : "4JgAh3N86x",
        "category" : "coffee"
    },
    {
        "_id" : "4JEEuhNIae",
        "category" : "grocery"
    }
]

W nowej wersji MongoDB 3.4 powinieneś być w stanie wykorzystać natywne operatory MongoDB $addFields i $indexOfArray w ramach agregacji.

  • $addFields krok potoku umożliwia $project nowe pola do istniejących dokumentów bez znajomości wszystkich innych istniejących pól.
  • $indexOfArray wyrażenie zwraca pozycję konkretnego elementu w danej tablicy.

Podsumowując, możesz wypróbować następującą operację agregującą (z MongoDB 3.4):

var order = ["food", "coffee", "grocery"],
    projection = { 
        "$addFields" : { 
            "__order" : { "$indexOfArray" : [ order, "$category" ] } 
        } 
    },
    sort = { "$sort" : { "__order" : 1 } };
db.collection.aggregate([ projection, sort]);



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Nie znaleziono właściwości dla typu... Podczas korzystania z QueryDslPredicateExecutor z MongoDB i Spring-Data

  2. MongoDB Schema Design - nowa kolekcja czy referencja?

  3. agregacja mangusty, jak mapować wiele kolekcji w jedną tablicę

  4. kopia mongo z jednej kolekcji do drugiej (na tej samej bazie danych)

  5. Agregacja Mongo Dopasuj wiele wartości