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

Jak posortować kolekcję za pomocą ostatniego elementu tablicy?

Jeśli to możliwe, sugeruję, abyś zawsze (podwójnie) przechowywał wartość, według której chcesz sortować. Umieść go w tablicy iw drugim polu. Za każdym razem, gdy wstawiasz nową wartość do tablicy (lub przechowujesz tablicę), dodaj nowe pole odpowiadające „ostatniej wartości w tablicy”, a następnie indeksuj i sortuj według tego. W poniższym przykładzie nazwałem go 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" : [ ] }

Utwórz indeks:

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

A następnie użyj:

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

Będzie o wiele bardziej wszechstronny i rozszerzalny niż próba użycia rozwiązania agregującego (które będzie miało limit 16 MB dla zbioru wyników i sprawi, że pobieranie złożonych dokumentów będzie znacznie bardziej złożone, gdy trzeba będzie poradzić sobie z projekcją).



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak używać mongoimport do importowania csv

  2. Mongo $w wydajności operatora

  3. MongoDB - Nie można kanonizować zapytania:BadValue nieznany operator:$meta

  4. Zapytanie obliczeniowe Mongodb — mnożenie skumulowane

  5. Jak wykonać zbiorczą aktualizację dokumentów w MongoDB za pomocą Javy?