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

Napraw „$pullAll wymaga argumentu tablicowego, ale otrzymał podwójną” w MongoDB

Jeśli otrzymasz „$pullAll wymaga argumentu tablicowego, ale otrzymał podwójne ” błąd w MongoDB, ponieważ nie podałeś tablicy jako wartości do zastąpienia.

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 chcemy użyć $pullAll aby zastąpić wszystkie wystąpienia wartości w jednym z tych dokumentów.

Kod problemu

Oto przykład kodu, który powoduje powyższy błąd:

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

Wynik:

WriteResult({
	"nMatched" : 0,
	"nUpserted" : 0,
	"nModified" : 0,
	"writeError" : {
		"code" : 2,
		"errmsg" : "$pullAll requires an array argument but was given a double"
	}
})

Stało się tak, ponieważ zapomnieliśmy otoczyć wartość 7 z nawiasami kwadratowymi. Innymi słowy, zapomnieliśmy podać tablicę.

Rozwiązanie

Oto ten sam kod, ale tym razem podaliśmy wartość jako tablicę:

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

Wynik:

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

To pokazuje nam, że jeden dokument został dopasowany i 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 ] }

Dokument został pomyślnie zaktualizowany.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Limit zapełniania węzła js mongoose

  2. Lista kontrolna bezpieczeństwa dla wdrożeń produkcyjnych MongoDB

  3. Monitorowanie i zarządzanie operacjami MongoDB 4.0 z ClusterControl

  4. Połączenie MongoDb odrzucone

  5. Utwórz klaster baz danych w chmurze za pomocą MongoDB Atlas