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

Как да премахнете елемент от двойно вложен масив в документ на MongoDB.

За да изтриете въпросния елемент, всъщност ще използвате актуализация. По-конкретно ще направите актуализация с $pull команда, която ще премахне елемента от масива.

db.temp.update(
  { _id : "777" },
  {$pull : {"someArray.0.someNestedArray" : {"name":"delete me"}}}
)

Тук се случва малко "магия". Използване на .0 показва, че знаем, че променяме 0-ия елемент от someArray . Използване на {"name":"delete me"} показва, че знаем точните данни, които планираме да премахнем.

Този процес работи добре, ако заредите данните в клиент и след това извършите актуализацията. Този процес работи по-малко добре, ако искате да правите "общи" заявки, които изпълняват тези операции.

Мисля, че е най-лесно просто да разпознаете, че актуализирането на масиви от поддокументи обикновено изисква оригиналът да е в паметта в даден момент.

В отговор на първия коментар по-долу, вероятно можете да помогнете на ситуацията си, като промените малко структурата на данните

"someObjects" : {
  "name1":  {
        "someNestedArray" : [
            {
                "name" : "value"
            },
            {
                "name" : "delete me"
            }
        ]
    }
}

Сега можете да направите {$pull : { "someObjects.name1.someNestedArray" : ...

Ето проблема с вашата структура. MongoDB няма много добра поддръжка за манипулиране на "подмасиви". Вашата структура има масив от обекти и тези обекти съдържат масиви от повече обекти.

Ако имате следната структура, ще ви е трудно да използвате неща като $pull :

array [
  { subarray : array [] },
  { subarray : array [] },
]

Ако структурата ви изглежда така и искате да актуализирате subarray имате две опции:

  1. Променете структурата си, така че да можете да използвате $pull .
  2. Не използвайте $pull . Заредете целия обект в клиент и използвайте findAndModify .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Множество препратки към схеми в един масив от схеми - mongoose

  2. Как да създадете индекси, нечувствителни към главни букви в MongoDB

  3. MongoDB:изключение в initAndListen:20 Опит за създаване на файл за заключване в директория само за четене:/data/db, прекратяване

  4. Как да конвертирате изглед на MongoDB в колекция

  5. Уникалният индекс в mongoose не работи