perhatikan bahwa dalam kasus saya, ketika saya ingin {$ set: {val: NumberInt (0)}} di beberapa "val" yang sudah ditetapkan sebagai Long, itu tidak mengubahnya. Saya pertama-tama harus mengubahnya ke beberapa nilai lain, kemudian mengubahnya kembali ke 0, agar NumberInt (0) berlaku
kommradHomer
Saya memiliki masalah yang sama, setelah menyadari bahwa saya telah keliru mengubah int32 menjadi dua kali lipat, mengaturnya kembali menggunakan NumberInt () tidak memperbaiki tipe kecuali saya pertama kali berubah ke nilai yang berbeda.
tetapi dalam findOne dikatakan NumberLong (0) bukan sebagai 0
daydreamer
11
Secara default, shell mongo memperlakukan semua angka sebagai nilai floating-point. Jadi kita perlu secara eksplisit menentukan jenis nomor apa yang ingin kita gunakan misalnya NumberInt atau NumberLong. docs.mongodb.org/manual/core/shell-types
Yadu
12
Saya punya pertanyaan. NumberInt hanya disediakan di mongo shell, bagaimana Anda melakukannya dalam bahasa JavaScript seperti node.js?
Jika tipe nilai sudah dobel, maka perbarui nilainya dengan perintah $ set tidak bisa mengubah tipe nilai dobel menjadi int saat menggunakan fungsi NumberInt () atau NumberLong (). Jadi, untuk Mengubah jenis nilai, itu harus memperbarui seluruh catatan.
var re = db.data.find({"name":"zero"})
re['value']=NumberInt(0)
db.data.update({"name":"zero"}, re)
$setbekerja setidaknya di Mongo 4.2, jadi mungkin ini adalah bug.
Cerberus
-10
Yah, itu JavaScript, jadi yang Anda miliki dalam 'nilai' adalah Angka, yang bisa berupa bilangan bulat atau pelampung. Tapi sebenarnya tidak ada perbedaan dalam JavaScript. Dari Belajar JavaScript :
Tipe Data Angka
Tipe data angka dalam JavaScript adalah angka floating-point, tetapi mereka mungkin atau mungkin tidak memiliki komponen fraksional. Jika mereka tidak memiliki titik desimal atau komponen fraksional, mereka diperlakukan sebagai bilangan bulat — bilangan bulat basis-10 dalam kisaran –2 53 hingga 2 53 .
Sebenarnya itu tidak benar. Meskipun JS tidak melihat perbedaan, segera setelah Anda terhubung ke mongo dari bahasa lain (misalnya java), Anda akan sangat merasakan perbedaannya.
Omri Spector
2
Aplikasi saya telah rusak di berbagai titik hanya karena satu alasan, int disimpan dan dikembalikan sebagai float. Saya menduga penyebabnya pasti karena beberapa penyisipan manual yang saya lakukan melalui mongo shell yang menggunakan javascript.
Jawaban:
Anda juga bisa menggunakan NumberLong.
sumber
Sintaks yang sedikit lebih sederhana (setidaknya di Robomongo) bekerja untuk saya:
sumber
Jika tipe nilai sudah dobel, maka perbarui nilainya dengan perintah $ set tidak bisa mengubah tipe nilai dobel menjadi int saat menggunakan fungsi NumberInt () atau NumberLong (). Jadi, untuk Mengubah jenis nilai, itu harus memperbarui seluruh catatan.
sumber
$set
bekerja setidaknya di Mongo 4.2, jadi mungkin ini adalah bug.Yah, itu JavaScript, jadi yang Anda miliki dalam 'nilai' adalah Angka, yang bisa berupa bilangan bulat atau pelampung. Tapi sebenarnya tidak ada perbedaan dalam JavaScript. Dari Belajar JavaScript :
sumber