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".