Detail Sepele
- Jika jenis kanonis elemen BSON yang dibandingkan berbeda, hanya perbandingan kesetaraan (
==,>=,<=) dari null &undefined akan mengembalikantrue; jika tidak, perbandingan apa pun dengannullakan 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 > nullakan diterjemahkan menjadi(5-5) > 0 --> Falsekarena tipe kanonik dari null adalah 5.
Demikian pula,null < nullakan 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.