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

Jak usunąć element z podwójnie zagnieżdżonej tablicy w dokumencie MongoDB.

Aby usunąć przedmiotowy element, faktycznie użyjesz aktualizacji. Dokładniej, zamierzasz dokonać aktualizacji za pomocą $pull polecenie, które usunie element z tablicy.

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

Dzieje się tu trochę „magii”. Korzystanie z .0 wskazuje, że wiemy, że modyfikujemy 0. element someArray . Używanie {"name":"delete me"} wskazuje, że znamy dokładne dane, które planujemy usunąć.

Ten proces działa dobrze, jeśli załadujesz dane do klienta, a następnie wykonasz aktualizację. Ten proces działa gorzej, jeśli chcesz wykonywać „ogólne” zapytania, które wykonują te operacje.

Myślę, że najłatwiej jest po prostu rozpoznać, że aktualizacja tablic poddokumentów zazwyczaj wymaga posiadania oryginału w pamięci w pewnym momencie.

W odpowiedzi na pierwszy komentarz poniżej, prawdopodobnie możesz pomóc swojej sytuacji, zmieniając nieco strukturę danych

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

Teraz możesz zrobić {$pull : { "someObjects.name1.someNestedArray" : ...

Oto problem z twoją strukturą. MongoDB nie ma zbyt dobrego wsparcia dla manipulowania „podtablicami”. Twoja struktura ma tablicę obiektów, a te obiekty zawierają tablice większej liczby obiektów.

Jeśli masz następującą strukturę, będziesz miał trudności z używaniem takich rzeczy jak $pull :

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

Jeśli Twoja struktura wygląda tak i chcesz zaktualizować subarray masz dwie opcje:

  1. Zmień swoją strukturę, aby móc wykorzystać $pull .
  2. Nie używaj $pull . Załaduj cały obiekt do klienta i użyj findAndModify .


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB:bezwarunkowe aktualizacje?

  2. Wiosenna paginacja danych mongo

  3. Metoda MongoDB Date()

  4. Jak mogę połączyć wiele kolekcji w jedną kolekcję za pomocą $lookup mongodb lub nodejs mongodb?

  5. Wstaw MongoDBWiele()