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

jak seřadit pole objektů podle libovolného seznamu v mongo

Můžete zkusit spustit vlastní funkci komparátoru s nativním JavaScriptem sort() metoda na poli vrácená 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);

Ukázkový výstup

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

S novou verzí MongoDB 3.4 byste měli být schopni využít použití nativních operátorů MongoDB $addFields a $indexOfArray v agregačním rámci.

  • The $addFields pipeline step vám umožňuje $project nová pole k existujícím dokumentům, aniž byste znali všechna ostatní existující pole.
  • $indexOfArray výraz vrací pozici konkrétního prvku v daném poli.

Takže když to dáte dohromady, můžete zkusit následující agregační operaci (s MongoDB 3.4):

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



  1. Nelze se připojit k databázi atlasu MongoDB

  2. Testování výkonu HBase pomocí YCSB

  3. Relační DB v paměti?

  4. Převod DBObject na Java Object při načítání hodnot z MongoDB