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

Đối tượng cập nhật MongoDb trong một mảng vào lần xuất hiện đầu tiên từ cuối cùng

Tôi hiểu những gì bạn đang nói là bạn muốn đối sánh phần tử cuối cùng trong trường hợp này hay thực tế là xử lý khớp theo thứ tự ngược lại. Không có cách nào để sửa đổi điều này và chỉ mục được lưu trữ trong mã vị trí <> $ toán tử sẽ luôn là kết quả phù hợp "đầu tiên".

Nhưng bạn có thể thay đổi cách tiếp cận của mình đối với điều này, vì hành vi mặc định của $ push là "nối" vào cuối mảng. Nhưng MongoDB 2.6 đã giới thiệu $ position công cụ sửa đổi để trên thực tế, bạn có thể luôn "xếp trước" vào mảng có nghĩa là mục "lâu đời nhất" của bạn nằm ở cuối.

Lấy ví dụ như sau:

db.artest.update(
   { "array": { "$in": [5] } },
   { "$push": { "array": { "$each": [5], "$position": 0 } }},
   { "upsert": true }
)

db.artest.update(
    { "array": { "$in": [5] } },
    { "$push": { "array": { "$each": [6], "$position": 0 } }},
    { "upsert": true }
)

Điều này dẫn đến tài liệu là "đảo ngược" của $ push thông thường hành vi:

{ "_id" : ObjectId("53eaf4517d0dc314962c93f4"), "array" : [ 6, 5 ] }

Ngoài ra, bạn có thể áp dụng mã $ sort sửa đổi khi cập nhật tài liệu của bạn để "sắp xếp" các phần tử để chúng bị đảo ngược. Nhưng đó có thể không phải là lựa chọn tốt nhất nếu các giá trị trùng lặp được lưu trữ.

Vì vậy, hãy xem xét việc lưu trữ các mảng của bạn theo kiểu "đảo ngược" nếu bạn có ý định so khớp các mục "mới nhất" với "đầu tiên". Hiện tại, đó là cách duy nhất để bạn có được hành vi "phù hợp từ cuối cùng".




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cách sử dụng các biến trong hàm bản đồ MongoDB Map-Reduce

  2. Tên trường batchSize bị bỏ qua trong Phép chiếu trường

  3. Truy vấn tổng hợp trong mongo hoạt động, không hoạt động trong Pymongo

  4. windows:rails:lỗi khi cài đặt bson_ext

  5. mongodb Không thể áp dụng công cụ sửa đổi $ pull / $ pullAll cho không phải mảng, Cách xóa phần tử mảng