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

Как да сортирате масив в колекция

Ако приемем елементите във вашите products масив са уникални, няма лесна поддръжка от страна на сървъра за поддържане на този масив в сортиран ред, както при MongoDB 2.4. Най-добрата ви опция, предвид вложените масиви, ще бъде да сортирате масивите в логиката на вашето приложение, както е подходящо (т.е. при вмъкване/актуализиране или при извличане/показване).

Съображения за моделиране на данни

Ако трябва да извършите много манипулации на вложени записи в масив, трябва да помислите за изравняване на вашия модел на данни, за да улесните работата с него. Вашата цел при проектиране с MongoDB трябва да бъде да имате модел на данни, който е подходящ за вашите случаи на използване на приложението с приемлив баланс на производителност между лекота на вмъкване/актуализиране/запитване. Определено не е нужно да моделирате всичко в една колекция/заявка, ако няма смисъл да го правите, и трябва да сте готови да денормализирате (дублирате) данни. За връзката много към много, като продукти <=> категории, е типично да се вгради и денормализира всеки обект, който се актуализира по-рядко (например вграждане на категории в продукти).

Постоянни сортирани, ограничени масиви (неуникални елементи)

Ако искате да запазите масивите в сортиран ред и елементите не са уникални, MongoDB 2.4 има опция за $push към сортиран масив, но това трябва да се използва заедно със срез (ограничение на масива). Ако $push идентични записи в сортиран масив ще се окажете с дубликати (така че това вероятно не е това, което търсите).

Примерна актуализация, като се приема page във вашия пример беше името на колекцията:

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. Не може да използва вложени VariableOperators.mapItemsOf в Spring Data MongoDb

  2. Не мога да намеря документи, търсещи по ObjectId с помощта на Mongoose

  3. Класовете Mongo не се зареждат автоматично в конзолното приложение на Yii

  4. Mongo агрегиране срещу Java за цикъл и производителност

  5. Как се сравняват данните на Morphia, Mongo4j и Spring за MongoDB?