Als u de opdracht “$pullAll heeft een array-argument nodig, maar een dubbele . heeft gekregen, ”-fout in MongoDB, omdat u geen array hebt opgegeven als de te vervangen waarde.
Voorbeeld
Stel we hebben een collectie met de volgende documenten:
{ "_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 ] }
En we willen $pullAll
. gebruiken om alle exemplaren van een waarde in een van die documenten te vervangen.
Probleemcode
Hier is een voorbeeld van code die de bovenstaande fout veroorzaakt:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: 7 } }
)
Resultaat:
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0, "writeError" : { "code" : 2, "errmsg" : "$pullAll requires an array argument but was given a double" } })
Dit gebeurde omdat we waren vergeten de waarde 7
te omringen met vierkante haken. Met andere woorden, we zijn vergeten een array op te geven.
Oplossing
Hier is dezelfde code, maar deze keer hebben we de waarde als een array opgegeven:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
Resultaat:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Dit laat ons zien dat één document is gematcht en aangepast.
Laten we de collectie nu eens bekijken:
db.foo.find()
Resultaat:
{ "_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 ] }
Het document is succesvol bijgewerkt.