Nếu bạn nhận được “ $ pullAll yêu cầu một đối số mảng nhưng được cung cấp một đôi ”Trong MongoDB, đó là do bạn không cung cấp một mảng làm giá trị để thay thế.
Ví dụ
Giả sử chúng ta có một bộ sưu tập với các tài liệu sau:
{ "_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 ] }
Và chúng tôi muốn sử dụng $pullAll
để thay thế tất cả các lần xuất hiện của một giá trị trong một trong các tài liệu đó.
Mã sự cố
Dưới đây là một ví dụ về mã gây ra lỗi trên:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: 7 } }
)
Kết quả:
WriteResult({ "nMatched" : 0, "nUpserted" : 0, "nModified" : 0, "writeError" : { "code" : 2, "errmsg" : "$pullAll requires an array argument but was given a double" } })
Điều này xảy ra do chúng tôi quên đặt giá trị 7
có dấu ngoặc vuông. Nói cách khác, chúng tôi đã quên cung cấp một mảng.
Giải pháp
Đây là cùng một mã ngoại trừ lần này, chúng tôi đã cung cấp giá trị dưới dạng một mảng:
db.foo.update(
{ _id: 1 },
{ $pullAll: { bar: [ 7 ] } }
)
Kết quả:
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Điều này cho chúng tôi thấy rằng một tài liệu đã được khớp và sửa đổi.
Bây giờ chúng ta hãy xem bộ sưu tập:
db.foo.find()
Kết quả:
{ "_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 ] }
Tài liệu đã được cập nhật thành công.