note que no meu caso, quando eu queria {$ set: {val: NumberInt (0)}} em algum "val" que já esteja definido como Long, isso não foi alterado. Eu tinha que primeiro alterá-lo para algum outro valor, então alterá-lo de volta a 0, para o NumberInt (0) para entrar em vigor
kommradHomer
Eu tive o mesmo problema, depois de perceber que alterei por engano um int32 para dobrar, configurá-lo novamente usando NumberInt () não corrigia o tipo, a menos que eu mudasse para um valor diferente.
Por padrão, o mongo shell trata todos os números como valores de ponto flutuante. Portanto, precisamos especificar explicitamente que tipo de número queremos usar, por exemplo, NumberInt ou NumberLong. docs.mongodb.org/manual/core/shell-types
Yadu
12
Eu tenho uma pergunta. O NumberInt é fornecido apenas no mongo shell, como você faz isso na linguagem JavaScript como node.js?
Se o tipo de valor já for duplo, atualize o valor com o comando $ set, não é possível alterar o tipo de valor double para int ao usar a função NumberInt () ou NumberLong (). Portanto, para alterar o tipo de valor, ele deve atualizar o registro inteiro.
var re = db.data.find({"name":"zero"})
re['value']=NumberInt(0)
db.data.update({"name":"zero"}, re)
$setfuncionou pelo menos no Mongo 4.2, então talvez isso tenha sido um bug.
Cerberus
-10
Bem, é JavaScript, então o que você tem em 'value' é um Número, que pode ser um número inteiro ou um número flutuante. Mas não há realmente nenhuma diferença no JavaScript. De Aprendendo JavaScript :
O Número Tipo de Dados
Os tipos de dados numéricos no JavaScript são números de ponto flutuante, mas podem ou não ter um componente fracionário. Se eles não tiverem um ponto decimal ou componente fracionário, serão tratados como números inteiros - números inteiros da base 10 em um intervalo de –2 53 a 2 53 .
Atualmente isso não é verdade. Enquanto o JS não vê diferença, assim que você se conectar ao mongo de outro idioma (por exemplo, java), você sentirá a diferença.
Omri Spector
2
Meu aplicativo foi quebrado em pontos diferentes apenas por um motivo: int é salvo e retornado como float. Eu suspeito que a causa deve ser algumas inserções manuais que fiz via mongo shell que usa javascript.
Respostas:
Você também pode usar NumberLong.
fonte
Uma sintaxe um pouco mais simples (pelo menos em Robomongo) funcionou para mim:
fonte
Se o tipo de valor já for duplo, atualize o valor com o comando $ set, não é possível alterar o tipo de valor double para int ao usar a função NumberInt () ou NumberLong (). Portanto, para alterar o tipo de valor, ele deve atualizar o registro inteiro.
fonte
$set
funcionou pelo menos no Mongo 4.2, então talvez isso tenha sido um bug.Bem, é JavaScript, então o que você tem em 'value' é um Número, que pode ser um número inteiro ou um número flutuante. Mas não há realmente nenhuma diferença no JavaScript. De Aprendendo JavaScript :
fonte