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

Jak posortować tablicę w kolekcji

Zakładając pozycje w Twoich products tablice są unikalne, nie ma łatwego wsparcia po stronie serwera dla utrzymania tej tablicy w porządku posortowanym jak w MongoDB 2.4. Najlepszą opcją, biorąc pod uwagę zagnieżdżone tablice, będzie odpowiednie sortowanie tablic w logice aplikacji (tj. przy wstawianiu/aktualizowaniu lub przy pobieraniu/wyświetlaniu).

Zagadnienia dotyczące modelowania danych

Jeśli potrzebujesz dużo manipulować zagnieżdżonymi wpisami tablicy, powinieneś rozważyć spłaszczenie modelu danych, aby ułatwić pracę. Twoim celem projektowym z MongoDB powinno być posiadanie modelu danych, który jest odpowiedni dla przypadków użycia aplikacji z akceptowalną równowagą wydajności między łatwością wstawiania/aktualizowania/zapytania. Zdecydowanie nie musisz modelować wszystkiego w jednej kolekcji/zapytaniu, jeśli nie ma to sensu, i powinieneś być przygotowany na denormalizację (zduplikowanie) danych. W przypadku relacji wiele-do-wielu, takich jak kategorie produktów <=>, typowe jest osadzanie i denormalizowanie tego, który element jest rzadziej aktualizowany (na przykład osadzanie kategorii w produktach).

Utrzymujące się posortowane, ograniczone tablice (nieunikalne elementy)

Jeśli chcesz zachować tablice w kolejności posortowanej i elementy nie są unikalne, MongoDB 2.4 ma opcję $push do posortowanej tablicy, ale musi to być używane w połączeniu z wycinkiem (limit tablicy). Jeśli $push identyczne wpisy do posortowanej tablicy, otrzymasz duplikaty (więc prawdopodobnie nie o to ci chodzi).

Przykładowa aktualizacja, zakładając page w twoim przykładzie była nazwa kolekcji:

db.page.update(
    // Query
    { "_id": "56rgt46rt54h68rt4h6" },

    // Update sorted array
    // NB: referring by array index position 0, as there isn't a named reference
    { $push : {
        "categories.0.products" : { 

            // List of new elements to push
            $each : [
                { "name" : "E", "pos": 3 }
            ],

            // Sort by pos (ascending)
            $sort : { "pos" : 1 },

            // Maximum number of array elements (required for $sort)
            $slice : -100
        }
    }}
)



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Dodaj nowy Validator do istniejącej kolekcji

  2. Dynamiczne zapytania MongoRepository

  3. Łączenie MongoDB z Ruby za pomocą certyfikatów z podpisem własnym dla SSL

  4. Agregacja akumulacja obiektów wewnętrznych

  5. Generuj PDF za pomocą biblioteki JasperReports i MongoDB