MongoDB
 sql >> Teknologi Basis Data >  >> NoSQL >> MongoDB

cara mengurutkan array objek dengan daftar arbitrer di mongo

Anda dapat mencoba menjalankan fungsi pembanding khusus dengan JavaScript asli sort() metode pada larik yang dikembalikan dari cursor.toArray() metode:

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);

Contoh Keluaran

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

Dengan versi MongoDB 3.4 yang baru, Anda seharusnya dapat memanfaatkan penggunaan operator asli MongoDB $addFields dan $indexOfArray dalam kerangka agregasi.

  • The $addFields langkah pipa memungkinkan Anda untuk $project bidang baru ke dokumen yang ada tanpa mengetahui semua bidang lain yang ada.
  • The $indexOfArray ekspresi mengembalikan posisi elemen tertentu dalam larik tertentu.

Jadi secara keseluruhan Anda dapat mencoba operasi agregat berikut (dengan 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. Bagaimana cara mendapatkan objek Node saat menggunakan Neo4j jdbc?

  2. Cara mendapatkan data data Mongo menggunakan agregat MongoDB

  3. Hapus kunci dari dokumen MongoDB menggunakan Mongoose

  4. Bagaimana cara memperbarui nilai dokumen tertanam tertentu, di dalam array, dari dokumen tertentu di MongoDB?

  5. Penjelasan MongoDB Upsert