「$pullAllには配列引数が必要ですが、doubleが与えられた 」MongoDBのエラー。これは、置き換える値として配列を指定しなかったためです。
例
次のドキュメントを含むコレクションがあるとします。
{ "_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 ] }
そして、$pullAll
を使用します これらのドキュメントのいずれかで出現するすべての値を置き換えます。
問題コード
上記のエラーの原因となるコードの例を次に示します。
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: 7 } }
)
結果:
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0, "writeError" : { "code" : 2, "errmsg" : "$pullAll requires an array argument but was given a double" } })
これは、値7
を囲むのを忘れたために発生しました 角かっこ付き。つまり、配列を提供するのを忘れていました。
ソリューション
今回は配列として値を提供したことを除いて、同じコードを次に示します。
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
結果:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
これは、1つのドキュメントが一致して変更されたことを示しています。
今すぐコレクションを見てみましょう:
db.foo.find()
結果:
{ "_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 ] }
ドキュメントは正常に更新されました。