sql >> Databáze >  >> NoSQL >> MongoDB

Jak seřadit pole v kolekci

Za předpokladu, že položky ve vašich products pole jsou jedinečné, neexistuje snadná podpora na straně serveru pro udržování tohoto pole v seřazeném pořadí jako v MongoDB 2.4. Nejlepší možností vzhledem k vnořeným polím bude seřadit pole podle potřeby ve vaší aplikační logice (tj. při vložení/aktualizaci nebo při načítání/zobrazení).

Úvahy o datovém modelování

Pokud potřebujete hodně manipulovat s položkami vnořených polí, měli byste zvážit zploštění datového modelu, aby se s ním snadněji pracovalo. Vaším cílem návrhu s MongoDB by mělo být mít datový model, který je vhodný pro případy použití vaší aplikace s přijatelnou výkonnostní rovnováhou mezi snadným vkládáním/aktualizací/dotazováním. Rozhodně nemusíte modelovat vše v jedné kolekci/dotazu, pokud to nedává smysl, a měli byste být připraveni denormalizovat (duplikovat) data. Pro vztah mnoho k mnoha, jako jsou kategorie produktů <=>, je typické vložit a denormalizovat entitu, která je méně často aktualizována (například vkládání kategorií do produktů).

Trvalá seřazená, omezená pole (neunikátní položky)

Pokud chcete zachovat pole v seřazeném pořadí a položky nejsou jedinečné, MongoDB 2.4 má možnost $push do setříděného pole, ale to musí být použito ve spojení s řezem (limit pole). Pokud $push identické položky s setříděným polem, skončíte s duplikáty (takže to pravděpodobně není to, co hledáte).

Ukázková aktualizace za předpokladu page ve vašem příkladu byl název kolekce:

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. Mongodb Mapreduce hlásí chybu

  2. Vypočítejte průměr polí ve vložených dokumentech/pole

  3. Import csv do mongodb pomocí kódu PHP

  4. duplikovat sbírku do sebe