MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Как да сортирате колекция, използвайки последния елемент от масив

Ако е възможно, бих ви предложил просто винаги (двойно) да съхранявате стойността, по която искате да сортирате. Поставете го в масива и във второ поле. Всеки път, когато вкарвате нова стойност в масива (или съхранявате масива), добавете ново поле, съответстващо на „последната стойност в масива“ и след това индексирайте и сортирайте това. В примера по-долу го нарекох 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" : [ ] }

Създайте индекс:

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

И след това използвайте:

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

Ще бъде много по-гъвкав и разширяем, отколкото да се опитвате да използвате решение за агрегиране (което ще има ограничение от 16 MB за набора от резултати и ще направи много по-сложно извличането на сложни документи, когато трябва да се справите с проекция).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Mongodb конвертира множество обекти в масив, на място, за постоянно

  2. Как да разположите ClusterControl на AWS, за да управлявате вашата облачна база данни

  3. Вземете ID на последния вмъкнат документ в mongoDB с Java драйвер

  4. MongoDB сортиране()

  5. Какво представлява строг режим на MongoDBs и добра идея ли е да се използва?