Wenn Sie die Meldung „$pullAll erfordert ein Array-Argument, aber es wurde ein Double angegeben“ erhalten ”-Fehler in MongoDB, weil Sie kein Array als zu ersetzenden Wert angegeben haben.
Beispiel
Angenommen, wir haben eine Sammlung mit den folgenden Dokumenten:
{ "_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 ] }
Und wir wollen $pullAll
verwenden um alle Vorkommen eines Werts in einem dieser Dokumente zu ersetzen.
Problemcode
Hier ist ein Codebeispiel, das den obigen Fehler verursacht:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: 7 } }
)
Ergebnis:
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0, "writeError" : { "code" : 2, "errmsg" : "$pullAll requires an array argument but was given a double" } })
Dies geschah, weil wir vergessen hatten, den Wert 7
einzuschließen mit eckigen Klammern. Mit anderen Worten, wir haben vergessen, ein Array anzugeben.
Lösung
Hier ist derselbe Code, außer dass wir diesmal den Wert als Array bereitgestellt haben:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
Ergebnis:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Dies zeigt uns, dass ein Dokument abgeglichen und geändert wurde.
Werfen wir jetzt einen Blick auf die Sammlung:
db.foo.find()
Ergebnis:
{ "_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 ] }
Das Dokument wurde erfolgreich aktualisiert.