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

Cách hoạt động của tham số arrayFilters trong MongoDB

Trong MongoDB, khi bạn cập nhật tài liệu có chứa mảng, bạn có tùy chọn sử dụng arrayFilters tham số.

arrayFilters tham số cho phép bạn chỉ định một mảng tài liệu lọc để xác định phần tử mảng nào cần sửa đổi.

Trong tài liệu cập nhật, hãy sử dụng $[<identifier>] toán tử vị trí được lọc, xác định các phần tử mảng phù hợp với arrayFilters điều kiện cho hoạt động cập nhật.

Cú pháp

Cú pháp như sau:

{ <update operator>: { "<array>.$[<identifier>]" : value } },
{ arrayFilters: [ { <identifier>: <condition> } ] }

Ví dụ:khi được sử dụng với updateMany() , nó sẽ như thế này:

db.collection.updateMany(
   { <query conditions> },
   { <update operator>: { "<array>.$[<identifier>]" : value } },
   { arrayFilters: [ { <identifier>: <condition> } ] }
)

Ví dụ

Giả sử chúng ta có một bộ sưu tập có tên là players với các tài liệu sau:

{ "_id" : 1, "scores" : [ 1, 5, 17 ] }
{ "_id" : 2, "scores" : [ 8, 17, 18 ] }
{ "_id" : 3, "scores" : [ 15, 11, 8 ] }

Chúng tôi có thể sử dụng arrayFilters để chỉ cập nhật những phần tử mảng có giá trị cao hơn một số lượng nhất định.

Ví dụ:

db.players.updateMany(
   { scores: { $gte: 10 } },
   { $set: { "scores.$[e]" : 10 } },
   { arrayFilters: [ { "e": { $gte: 10 } } ] }
)

Kết quả:

{ "acknowledged" : true, "matchedCount" : 3, "modifiedCount" : 3 }

Thông báo cho chúng tôi biết rằng ba tài liệu đã được khớp và sửa đổi.

Đây là giao diện của các tài liệu bây giờ.

db.players.find()

Kết quả:

{ "_id" : 1, "scores" : [ 1, 5, 10 ] }
{ "_id" : 2, "scores" : [ 8, 10, 10 ] }
{ "_id" : 3, "scores" : [ 10, 10, 8 ] }

Chúng ta có thể thấy rằng tất cả các giá trị trước đây lớn hơn hoặc bằng 10 bây giờ là 10.

Trong trường hợp này, tôi đã sử dụng e với tư cách là <identifier> . Lưu ý rằng <identifier> phải bắt đầu bằng một chữ cái thường và chỉ chứa các ký tự chữ và số.


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Chuyển đổi dự phòng cho MySQL Replication (và những thứ khác) - Nó có nên được Tự động hóa không?

  2. Tổng hợp MongoDB, cách addToSet từng phần tử của mảng trong đường ống nhóm

  3. TypeError:ObjectId ('') không thể tuần tự hóa JSON

  4. Tổng hợp MongoDB:Đếm các trường riêng biệt

  5. Sử dụng chỉ mục ghép MongoDB