Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MongoDB

Truy vấn MongoDB tìm giá trị số lớn nhất của một cột?

Để tìm giá trị số (numeric) lớn nhất của một cột/trường trong MongoDB, khi cột có thể chứa cả số và chuỗi (string), bạn sử dụng $not kết hợp $type để lọc chỉ kiểu số, sau đó sắp xếp giảm dần và limit 1.

Tạo dữ liệu mẫu

Trường StudentMathMarks chứa lẫn số (number) và chuỗi (string): 69 (số), "89" (chuỗi), 82 (số), "100" (chuỗi).


Hiển thị tất cả:

{ "_id" : ObjectId("5cba05727219729fde21ddb1"), "StudentName" : "John", "StudentMathMarks" : 69 }
{ "_id" : ObjectId("5cba059d7219729fde21ddb2"), "StudentName" : "Carol", "StudentMathMarks" : "89" }
{ "_id" : ObjectId("5cba059d7219729fde21ddb3"), "StudentName" : "Chris", "StudentMathMarks" : 82 }
{ "_id" : ObjectId("5cba059d7219729fde21ddb4"), "StudentName" : "John", "StudentMathMarks" : "100" }

Tìm giá trị SỐ lớn nhất (bỏ qua chuỗi)

{ "_id" : ObjectId("5cba059d7219729fde21ddb3"), "StudentName" : "Chris", "StudentMathMarks" : 82 }

Giải thích

  • $type: 2 - Kiểu String (xem BSON types: 1=Double, 2=String, 3=Object, 16=Int32, 18=Int64)
  • {$not: {$type: 2}} - Không phải kiểu String (chỉ giữ number: Double, Int32, Int64)
  • .sort({StudentMathMarks: -1}) - Sắp xếp giảm dần
  • .limit(1) - Lấy 1 document đầu (giá trị số lớn nhất)

Kết quả 82 (số) lớn hơn 69 (số). Các giá trị "89" và "100" là chuỗi bị loại bỏ.

Cách tốt hơn (Aggregation): Dùng $convert hoặc $toDouble để chuẩn hóa kiểu trước khi so sánh.