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

MongoDB $ pullAll

Trong MongoDB, bạn có thể sử dụng $pullAll toán tử để xóa tất cả các trường hợp của các giá trị được chỉ định khỏi một mảng hiện có.

Sử dụng $pullAll kết hợp với một phương thức như update() , updateOne() hoặc updateMany() để cập nhật / các tài liệu được chỉ định với sự thay đổi.

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à giả sử chúng tôi muốn xóa tất cả các giá trị của 7 từ mảng trong tài liệu 1.

Chúng tôi có thể làm điều này:

db.foo.update( 
  { _id: 1 }, 
  { $pullAll: { bar: [ 7 ] } } 
)

Đầu ra:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Thông báo đó cho chúng tôi biết rằng một tài liệu đã khớp và một tài liệu (tức là cùng một tài liệu) đã được 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 ] }

Chúng ta có thể thấy rằng mảng trong tài liệu 1 đã có tất cả 7 các giá trị đã bị xóa như đã chỉ định.

Xóa nhiều giá trị

Đối số mà chúng tôi đã cung cấp cho $pullAll là một mảng và do đó chúng tôi có thể xóa nhiều giá trị bằng cách phân tách chúng bằng dấu phẩy.

Ví dụ:

db.foo.update( 
  { _id: 2 }, 
  { $pullAll: { bar: [ 17, 18 ] } } 
)

Đầu ra:

WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })

Bây giờ chúng ta hãy kiểm tra lại 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, 8 ] }
{ "_id" : 3, "bar" : [ 15, 11, 8, 0, 1, 3 ] }

Chúng ta có thể thấy rằng các giá trị 1718 đã bị xóa khỏi mảng trong tài liệu 2.

Cập nhật tất cả tài liệu

Bạn có thể thêm multi: true hoặc sử dụng updateMany() phương pháp cập nhật tất cả các tài liệu phù hợp với tiêu chí.

Khi bạn thực hiện việc này, hãy xóa mọi tiêu chí lựa chọn khỏi tài liệu truy vấn đầu tiên (chỉ định / s tài liệu nào cần cập nhật). Nói cách khác, sử dụng tài liệu trống làm đối số đầu tiên cho update() (hoặc updateMany() ) phương pháp.

Ví dụ:

db.foo.update( 
  { }, 
  { $pullAll: { bar: [ 1, 8 ] } },
  { multi: true }
)

Đầu ra:

WriteResult({ "nMatched" : 3, "nUpserted" : 0, "nModified" : 3 })

Trong trường hợp này, chúng ta có thể thấy rằng ba tài liệu khớp nhau (vì có ba tài liệu trong bộ sưu tập) và cả ba đều đã được sửa đổi (vì tất cả chúng đều chứa các giá trị được chỉ định).

Hãy kiểm tra lại bộ sưu tập:

db.foo.find()

Kết quả:

{ "_id" : 1, "bar" : [ 2, 3 ] }
{ "_id" : 2, "bar" : [ 0 ] }
{ "_id" : 3, "bar" : [ 15, 11, 0, 3 ] }

Chúng tôi có thể thấy rằng tất cả các phiên bản đã được cập nhật như đã chỉ định.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB $ nhân

  2. DBaaS lưu trữ MongoDB đầu tiên để hỗ trợ chính phủ Azure cho khu vực công

  3. MongoDB giải pháp cho tài liệu có kích thước trên 16mb?

  4. Đẩy đến hai mảng riêng biệt trong một lệnh gọi cập nhật trong mongodb

  5. 5 cách để có được một giờ cho một buổi hẹn hò trong MongoDB