Detail Sepele
- Jika jenis kanonis elemen BSON yang dibandingkan berbeda, hanya perbandingan kesetaraan (
==
,>=
,<=
) dari null &undefined akan mengembalikantrue
; jika tidak, perbandingan apa pun dengannull
akan mengembalikanfalse
.
Catatan: Tidak ada tipe BSON lain yang memiliki tipe kanonik yang sama dengannull
. - Jika jenis kanonis sama (yaitu, kedua elemen
null
), lalu bandingkan Nilai disebut. Untuknull
, ini hanya mengembalikan perbedaan antara kanonik ketik dari kedua elemen BSON dan kemudian melakukan perbandingan yang diminta terhadap0
.
Misalnya,null > null
akan diterjemahkan menjadi(5-5) > 0 --> False
karena tipe kanonik dari null adalah 5.
Demikian pula,null < null
akan diterjemahkan menjadi(5-5) < 0 --> False
.
Ini berarti null
hanya bisa sama dengan null
atau undefined
. Perbandingan lain yang melibatkan null
akan selalu mengembalikan false
.
Apakah ini Bug?
Jawaban yang Diperbarui:
Dokumentasi untuk operator perbandingan ($gt
, $lt
) referensi dokumentasi yang awalnya Anda tautkan , yang menyiratkan bahwa operator perbandingan harus bekerja dengan null
. Selanjutnya, pengurutan kueri (yaitu , db.find().sort()
) memang ikuti secara akurat perilaku Perbandingan/Urutkan yang didokumentasikan.
Ini, setidaknya, tidak konsisten. Saya rasa sebaiknya mengirimkan laporan bug ke situs JIRA MongoDB .
Jawaban Asli:
Menurut saya perilaku ini bukan bug.
Konsensus umum untuk Javascript
apakah itu undefined
berarti tidak ditugaskan sementara null
berarti ditugaskan tetapi sebaliknya tidak ditentukan . Perbandingan nilai terhadap yang tidak terdefinisi, selain kesetaraan, tidak masuk akal, setidaknya dalam arti matematis.
Mengingat bahwa BSON banyak mengambil dari JavaScript, ini juga berlaku untuk MongoDB.