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

MongoDB $pullAll

W MongoDB możesz użyć $pullAll operatora, aby usunąć wszystkie wystąpienia określonych wartości z istniejącej tablicy.

Użyj $pullAll w połączeniu z metodą taką jak update() , updateOne() lub updateMany() aby zaktualizować określony dokument/y o zmianę.

Przykład

Załóżmy, że mamy kolekcję z następującymi dokumentami:

{ "_id" : 1, "bar" : [ 1, 7, 2, 3, 8, 7, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

I powiedzmy, że chcemy usunąć wszystkie wartości 7 z tablicy w dokumencie 1.

Możemy to zrobić:

db.foo.update( 
  { _id: 1 }, 
  { $pullAll: { bar: [ 7 ] } } 
)

Wyjście:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Ta wiadomość mówi nam, że jeden dokument pasował, a jeden (tj. ten sam dokument) został zmodyfikowany.

Przyjrzyjmy się teraz kolekcji:

db.foo.find()

Wynik:

{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 17, 18, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Widzimy, że tablica w dokumencie 1 ma wszystkie swoje 7 wartości usunięte zgodnie ze specyfikacją.

Usuń wiele wartości

Argument, który dostarczyliśmy do $pullAll jest tablicą, dlatego możemy usunąć wiele wartości, oddzielając je przecinkiem.

Przykład:

db.foo.update( 
  { _id: 2 }, 
  { $pullAll: { bar: [ 17, 18 ] } } 
)

Wyjście:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Teraz ponownie sprawdźmy kolekcję:

db.foo.find()

Wynik:

{ "_id" : 1, "bar" : [ 1, 2, 3, 8, 1 ] }
{ "_id" : 2, "bar" : [ 0, 1, 8, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Widzimy, że wartości 17 i 18 zostały usunięte z tablicy w dokumencie 2.

Aktualizuj wszystkie dokumenty

Możesz dodać multi: true lub użyj updateMany() metoda aktualizacji wszystkich dokumentów, które spełniają kryteria.

Gdy to zrobisz, usuń wszelkie kryteria wyboru z pierwszego dokumentu zapytania (który określa, które dokumenty do zaktualizowania). Innymi słowy, użyj pustego dokumentu jako pierwszego argumentu funkcji update() (lub updateMany() ).

Przykład:

db.foo.update( 
  { }, 
  { $pullAll: { bar: [ 1, 8 ] } },
  { multi: true }
)

Wyjście:

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

W tym przypadku widzimy, że trzy dokumenty zostały dopasowane (ponieważ w kolekcji są trzy dokumenty) i wszystkie trzy zostały zmodyfikowane (ponieważ wszystkie zawierały określone wartości).

Sprawdźmy jeszcze raz kolekcję:

db.foo.find()

Wynik:

{ "_id" : 1, "bar" : [ 2, 3 ] }
{ "_id" : 2, "bar" : [ 0 ] }
{ "_id" : 3, "bar" : [ 15, 11, 0, 3 ] }

Widzimy, że wszystkie instancje zostały zaktualizowane zgodnie z opisem.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDb:znajdź głęboko zagnieżdżony obiekt za pomocą $lookup

  2. Grupuj według stanu w MongoDB

  3. MongoDB $replaceAll

  4. Sklonuj kolekcję w MongoDB

  5. Wyszukiwanie MongoDB, gdy obce pole jest tablicą obiektów