Chi tiết Nitty-Gritty
Đọc qua nguồn Mongo mới nhất , về cơ bản có 2 trường hợp khi thực hiện so sánh liên quan đến null
:
- Nếu loại chuẩn của các phần tử BSON đang được so sánh là khác nhau, chỉ so sánh bình đẳng (
==
,>=
,<=
) của null &undefined sẽ trả vềtrue
; nếu không thì bất kỳ so sánh nào vớinull
sẽ trả vềfalse
.
Lưu ý: Không có loại BSON nào khác có cùng loại chuẩn lànull
. - Nếu loại chuẩn giống nhau (nghĩa là cả hai phần tử đều
null
), sau đó so sánhElementValues được gọi là. Đối vớinull
, điều này chỉ trả về sự khác biệt giữa canonical gõ của cả hai phần tử BSON và sau đó thực hiện so sánh được yêu cầu với0
.
Ví dụ:null > null
sẽ dịch thành(5-5) > 0 --> False
vì kiểu chuẩn của null là 5.
Tương tự,null < null
sẽ dịch thành(5-5) < 0 --> False
.
Điều này có nghĩa là null
chỉ có thể bằng null
hoặc undefined
. Bất kỳ so sánh nào khác liên quan đến null
sẽ luôn trả về false
.
Đây có phải là lỗi không?
Câu trả lời đã cập nhật:
Tài liệu cho các toán tử so sánh ( $ gt
, $ lt
) tham chiếu tài liệu mà bạn đã liên kết ban đầu , ngụ ý rằng các toán tử so sánh nên làm việc với null
. Hơn nữa, sắp xếp truy vấn ( tức là , db.find().sort()
) không tuân theo chính xác hành vi So sánh / Sắp xếp đã được lập thành văn bản.
Điều này, ít nhất, không nhất quán. Tôi nghĩ bạn nên gửi báo cáo lỗi tới trang web JIRA của MongoDB .
Câu trả lời gốc:
Tôi không nghĩ hành vi này là lỗi.
sự đồng thuận chung cho Javascript
đó có phải là undefined
không có nghĩa là chưa được chỉ định while null
có nghĩa là được chỉ định nhưng không được xác định khác . So sánh giá trị với không xác định, ngoài sự bình đẳng, không có ý nghĩa, ít nhất là theo nghĩa toán học.
Do BSON lấy rất nhiều từ JavaScript, điều này cũng áp dụng cho MongoDB.