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

Cara mengurutkan koleksi menggunakan elemen terakhir dari array

Jika memungkinkan, saya sarankan Anda selalu (menggandakan) menyimpan nilai yang ingin Anda urutkan. Masukkan ke dalam array dan di bidang kedua. Setiap kali Anda mendorong nilai baru ke array (atau menyimpan array), tambahkan bidang baru yang sesuai dengan "nilai terakhir dalam array" dan kemudian indeks dan urutkan itu. Pada contoh di bawah, saya menyebutnya lastR :

{ "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR": 3 }
{ "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR": 1 }
{ "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR": 10 }
{ "value" : -3, "r" : [ ] }

Buat indeks:

db.so.ensureIndex({lastR: 1})

Dan kemudian gunakan:

> db.so.find().sort({lastR: 1})
{ "_id" : ObjectId("5203a1c83c5438af60de63a1"), "value" : -3, "r" : [ ] }
{ "_id" : ObjectId("5203a1ad3c5438af60de639f"), "value" : 2, "r" : [ { "v" : 4 }, { "v" : 1 } ], "lastR" : 1 }
{ "_id" : ObjectId("5203a1d33c5438af60de63a2"), "value" : -10, "r" : [ { "v" : 1 }, { "v" : 3 } ], "lastR" : 3 }
{ "_id" : ObjectId("5203a1b73c5438af60de63a0"), "value" : -100, "r" : [ { "v" : 4 }, { "v" : 1 }, { "v" : 10 } ], "lastR" : 10 }

Ini akan jauh lebih fleksibel dan dapat diperluas daripada mencoba menggunakan solusi agregasi (yang akan memiliki batas 16 MB untuk kumpulan hasil dan membuatnya jauh lebih kompleks untuk mengambil dokumen kompleks saat perlu menangani proyeksi).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Bagaimana cara memfilter dan memetakan berbagai dokumen dalam kueri MongoDB?

  2. Laravel 4:Kelas 'MongoClient' Tidak Ditemukan

  3. Eclipselink dengan MongoDB java.lang.ClassCastException

  4. Cara mengelompokkan data menggunakan template mongo

  5. Menggunakan mongo dengan FLASK dan python