Làm thế nào để có được giá trị tối thiểu trong pyMongo


8

Tôi có một bộ sưu tập với một số lĩnh vực và tôi muốn nhận được giá trị tối thiểu từ một lĩnh vực. Tôi biết một lệnh để nhận giá trị tối đa:

collection.find_one(sort=[("myfield", -1)])["myfield"]

nhưng không phải là một để có được min. Có cách nào để làm việc này không?

Câu trả lời:


10

Bạn có thể đảo ngược hướng sắp xếp để lấy giá trị tối thiểu thay vì giá trị tối đa:

 # Sort by myfield (ascending value) and return first document
 collection.find_one(sort=[("myfield", 1)])["myfield"]

Ví dụ này giả định rằng:

  • myfield là một giá trị số (vì vậy thứ tự sắp xếp có ý nghĩa để xác định mức tối thiểu hoặc tối đa)
  • myfieldtồn tại trong tài liệu phù hợp được trả về (nếu không Python sẽ báo cáo KeyErrorkhi cố gắng tham chiếu trường không tồn tại).
  • tất cả các tài liệu trong bộ sưu tập đều có một myfieldgiá trị (các tài liệu không có myfieldgiá trị sẽ được sắp xếp trước các giá trị số tối thiểu)

Để đảm bảo sắp xếp của bạn dựa trên các tài liệu thực sự có myfieldgiá trị, bạn có thể thêm $existsvào tiêu chí truy vấn:

 collection.find_one({"myfield": {"$exists": True}}, sort=[("myfield", 1)])["myfield"]

Để biết thêm thông tin về sắp xếp, xem:

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.