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

Последици от използването на $unwind върху вложени масиви?

Винаги е добра идея да сте наясно с ресурсите на паметта, когато $unwind поради репликацията на данни, която възниква.

Използване на $match стесняването на резултатите до конкретните документи, които търсите, разбира се, е един от начините за намаляване на количеството памет, необходимо за съхраняване на върнатите данни.

Друг начин за намаляване на отпечатъка от паметта е с $project . $project ви позволява да реорганизирате документите в конвейера, така че да върнете само елементите, които ви интересуват.

За да използвам вашия пример,

{
  someInfo: "blah blah blah",
  answers: [
    {
      email: "[email protected]",
      values: [
        {value: 1, label: "test1"},
        {value: 2, label: "test2"}    
      ]
    },
    {
      email: "[email protected]",
      values: [
        {value: 6, label: "test1"},
        {value: 1, label: "test2"}    
      ]
    }
  ]
}

С

db.collection.aggregate([{ $match: { <element>: <value> }}, { $project: { _id: 0, answers: 1}}])

ще премахне someInfo и други атрибути, които може да не ви интересуват. Тогава можете да $project отново след размотаване...

db.collection.aggregate([
   { $match: { <element>: <value> }},
   { $project: { _id: 0, answers: 1}},
   { $unwind: "$answers"},
   { $unwind: "$answers.tags"},
   { $project: { e: "$answers.email", v: "$answers.values"}}
])

ще върне доста компактни резултати като:

{ e: "[email protected]", v: { value: 1, label: "test1" } }
{ e: "[email protected]", v: { value: 2, label: "test2" } }
{ e: "[email protected]", v: { value: 6, label: "test1" } }
{ e: "[email protected]", v: { value: 1, label: "test2" } }

Въпреки че еднобуквените имена на атрибути намаляват четимостта от хора, те намаляват размера на данните, които се раздуват от дълги повтарящи се имена на атрибути.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Изтичане на памет в MongoDB курсора (OutOfMemory)?

  2. Методът MongoDB GetCollection зарежда ли цялата колекция в RAM или препратка? ° С#

  3. Получих дублирани данни при многократно абониране

  4. Mongodb добавя ново поле в съществуващ документ с конкретна позиция

  5. ПРЕДУПРЕЖДЕНИЕ Грешка:Кодът на Meteor трябва винаги да се изпълнява в рамките на Fiber, когато се извиква метод на сървъра