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

MongoDB $pullAll

V MongoDB můžete použít $pullAll operátor k odstranění všech instancí zadaných hodnot z existujícího pole.

Použijte $pullAll ve spojení s metodou, jako je update() , updateOne() nebo updateMany() aktualizovat specifikovaný dokument/y se změnou.

Příklad

Předpokládejme, že máme sbírku s následujícími dokumenty:

{ "_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 ] }

A řekněme, že chceme odstranit všechny hodnoty 7 z pole v dokumentu 1.

Můžeme to udělat:

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

Výstup:

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

Tato zpráva nám říká, že jeden dokument se shodoval a jeden (tj. stejný dokument) byl upraven.

Pojďme se nyní podívat na kolekci:

db.foo.find()

Výsledek:

{ "_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 ] }

Můžeme vidět, že pole v dokumentu 1 má všech svých 7 hodnoty odstraněny, jak je uvedeno.

Odebrat více hodnot

Argument, který jsme poskytli $pullAll je pole, a proto můžeme odstranit více hodnot tak, že je oddělíme čárkou.

Příklad:

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

Výstup:

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

Nyní znovu zkontrolujeme sbírku:

db.foo.find()

Výsledek:

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

Vidíme, že hodnoty 17 a 18 byly odstraněny z pole v dokumentu 2.

Aktualizovat všechny dokumenty

Můžete přidat multi: true nebo použijte updateMany() metoda k aktualizaci všech dokumentů, které odpovídají kritériím.

Když to uděláte, odeberte všechna kritéria výběru z prvního dokumentu dotazu (který určuje, které dokumenty se mají aktualizovat). Jinými slovy, použijte prázdný dokument jako první argument update() (nebo updateMany() ) metoda.

Příklad:

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

Výstup:

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

V tomto případě vidíme, že se tři dokumenty shodovaly (protože ve sbírce jsou tři dokumenty) a všechny tři byly upraveny (protože všechny obsahovaly zadané hodnoty).

Podívejme se znovu na sbírku:

db.foo.find()

Výsledek:

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

Vidíme, že všechny instance byly aktualizovány, jak je uvedeno.


  1. Co je Hadoop Mapper Class v MapReduce?

  2. Mongo převede vložený dokument na pole

  3. Sestavení indexu MongoDB – Zabránění uživatelům ve spouštění nových sestavení

  4. Jaký je rozdíl mezi metodou insert(), insertOne() a insertMany()?