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.