MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Sửa lỗi "$ pullAll yêu cầu một đối số mảng nhưng đã được cung cấp một đôi" trong MongoDB

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.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB - Mang chứng chỉ SSL của riêng bạn

  2. Nhập json từ tệp vào mongodb bằng mongoimport

  3. Làm cách nào để kiểm tra xem một trường mảng có chứa một giá trị duy nhất hay một mảng khác trong MongoDB?

  4. Có bất kỳ lý do nào khiến tôi nên / không nên sử dụng ObjectId trong url RESTful của mình không

  5. Hiểu và quản lý dung lượng đĩa trên máy chủ MongoDB của bạn