MongoDB, tamsayı eklemeye çalışırken float ekler


209
   > db.data.update({'name': 'zero'}, {'$set': {'value': 0}}) 
   > db.data.findOne({'name': 'zero})
    {'name': 'zero', 'value': 0.0}  

Mongo'nun bir tamsayı eklemesini nasıl sağlarım?

teşekkür ederim


hangi mongodb sürümünü kullanıyorsunuz?
kamaradclimber


1
Benim durumumda, zaten uzun olarak ayarlanmış bazı "val" {$ set: {val: NumberInt (0)}} istediğimde, bunu değiştirmedi. NumberInt (0) yürürlüğe girmesi için önce başka bir değere değiştirmek, sonra tekrar 0 olarak değiştirmek zorunda kaldım
kommradHomer

Ben aynı sorunu vardı, ben yanlışlıkla farklı bir değere değişmedikçe NumberInt () kullanarak geri ayarlamak yanlış bir çift için int32 değiştirmişti fark sonra.
user1055568

Yanıtlar:


328
db.data.update({'name': 'zero'}, {'$set': {'value': NumberInt(0)}})

NumberLong'u da kullanabilirsiniz.


1
ama findOne diyor NumberLong (0) 0 olarak değil
daydreamer

11
Varsayılan olarak, mongo kabuğu tüm sayıları kayan nokta değerleri olarak kabul eder. Bu nedenle, ne tür bir sayı kullanmak istediğimizi açıkça belirtmemiz gerekir; örneğin, NumberInt veya NumberLong. docs.mongodb.org/manual/core/shell-types
Yadu

12
Bir sorum var. NumberInt yalnızca mongo kabuğunda sağlanır, bunu node.js gibi JavaScript dilinde nasıl yaparsınız?
客 易 客

@Shawyeok burada bir cevap stackoverflow.com/a/21870772/3815843
GRiMe2D

Ints'in sınırları olduğunu dikkate almak önemlidir. Sayı büyükse, NumberLong
Tim Givois

17

Biraz daha basit bir sözdizimi (en azından Robomongo'da) benim için çalıştı:

db.database.save({ Year : NumberInt(2015) });

5

Değer türü zaten çiftse, değeri $ set komutuyla güncelleştirmek NumberInt () veya NumberLong () işlevini kullanırken değer türünü double olarak int olarak değiştiremez. Bu nedenle, değer türünü değiştirmek için tüm kaydı güncellemesi gerekir.

var re = db.data.find({"name": "zero"})
re['value']=NumberInt(0)
db.data.update({"name": "zero"}, re)

$seten azından Mongo 4.2'de çalıştı, bu yüzden belki de bu bir hataydı.
Cerberus

-10

Bu JavaScript'tir, bu yüzden 'değer'de sahip olduğunuz şey bir tamsayı veya kayan nokta olabilen bir Sayıdır. Ancak JavaScript'te gerçekten bir fark yok. Gönderen Öğrenme JavaScript :

Sayı Veri Türü

JavaScript'teki sayı veri türleri kayan nokta sayılarıdır, ancak kesirli bir bileşeni olabilir veya olmayabilir. Ondalık virgül veya kesirli bileşen yoksa, tamsayı olarak kabul edilir - –2 53 ila 2 53 aralığındaki taban-10 tam sayı .


27
Aslında bu doğru değil. JS bir fark görmese de, başka bir dilden (örn. Java) gelen mongoya bağlanır bağlanmaz farkı hissedeceksiniz.
Omri Spector

2
Benim uygulama sadece bir nedenle farklı noktalarda kırılmış, int kaydedilir ve şamandıra olarak döndürülür. Nedeni, javascript kullanan mongo kabuğu aracılığıyla yaptığım bazı manuel eklemeler olması gerektiğinden şüpheleniyorum.
Melsi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.