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

Mongodb cập nhật số lượng tài liệu có hạn

Theo Sammaye, có vẻ như không có cách "thích hợp" để thực hiện việc này. Cách giải quyết của tôi là tạo trình tự như được nêu trên trang web mongo và chỉ cần thêm trường 'seq' vào mọi bản ghi trong bộ sưu tập của tôi. Bây giờ tôi có một trường duy nhất có thể sắp xếp đáng tin cậy để cập nhật.

Có thể sắp xếp đáng tin cậy là điều quan trọng ở đây. Tôi sẽ chỉ sắp xếp trên _id được tạo tự động nhưng tôi nhanh chóng nhận ra rằng thứ tự tự nhiên KHÔNG giống với thứ tự tăng dần của ObjectId (từ trang này có vẻ như giá trị chuỗi được ưu tiên hơn giá trị đối tượng phù hợp với hành vi mà tôi đã quan sát trong thử nghiệm). Ngoài ra, hoàn toàn có thể xảy ra trường hợp bản ghi được di chuyển lại trên đĩa, điều này làm cho thứ tự tự nhiên không đáng tin cậy để sắp xếp.

Vì vậy, bây giờ tôi có thể truy vấn bản ghi có 'seq' nhỏ nhất CHƯA được cập nhật để có được điểm bắt đầu bao gồm. Tiếp theo, tôi truy vấn các bản ghi có 'seq' lớn hơn điểm xuất phát của mình và bỏ qua (điều quan trọng là phải bỏ qua vì 'seq' có thể thưa thớt nếu bạn xóa tài liệu, v.v.) số lượng bản ghi mà tôi muốn cập nhật. Đặt giới hạn 1 cho truy vấn đó và bạn đã có một điểm cuối không bao gồm. Bây giờ tôi có thể đưa ra bản cập nhật với truy vấn 'updated' =0, 'seq'> =my start point và

Sau đây là các bước một lần nữa:

  1. tạo một chuỗi tự động tăng dần bằng cách sử dụng findAndModify
  2. thêm một trường vào bộ sưu tập của bạn, trường này sử dụng trình tự tăng tự động
  3. truy vấn để tìm điểm bắt đầu phù hợp:db.xx.find ({updated:0}). sort ({seq:1}). limit (1)
  4. truy vấn để tìm điểm cuối phù hợp:db.xx.find ({seq:{$ gt:startSeq}}). sort ({seq:1}). bỏ qua (updateCount) .limit (1)
  5. cập nhật bộ sưu tập bằng cách sử dụng điểm bắt đầu và điểm kết thúc:db.xx.update ({cập nhật:0, seq:{$ gte:startSeq}, seq:{$ lt:endSeq}, $ cô lập:1}, {đã cập nhật :1}, {multi:true})

Khá đau đớn nhưng nó sẽ hoàn thành công việc.




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Node Mongo Native - làm thế nào để biết khi nào con trỏ hết?

  2. 4 cách liệt kê các bộ sưu tập trong cơ sở dữ liệu MongoDB

  3. MongoDB - Chỉ cập nhật $ ref từ loại trường DBRef

  4. Làm cách nào để truy xuất datetiime từ mongodb? Bằng cách so sánh dữ liệu với jDateChosser Java

  5. Chơi! 2 Framework - Thêm trình điều khiển Java Mongo