tenga en cuenta que en mi caso, cuando quería {$ set: {val: NumberInt (0)}} en algún "val" que ya está configurado como Long, no lo cambió. Primero tuve que cambiarlo a otro valor, luego volver a cambiarlo a 0, para que NumberInt (0) surta efecto
kommradHomer
Tuve el mismo problema, después de darme cuenta de que había cambiado por error un int32 a doble, volver a configurarlo usando NumberInt () no solucionó el tipo a menos que primero lo cambiara a un valor diferente.
Por defecto, el shell mongo trata todos los números como valores de punto flotante. Por lo tanto, debemos especificar explícitamente qué tipo de número queremos usar, por ejemplo, NumberInt o NumberLong. docs.mongodb.org/manual/core/shell-types
Yadu
12
Tengo una pregunta. NumberInt solo se proporciona en mongo shell, ¿cómo se hace en lenguaje JavaScript como node.js?
Si el tipo de valor ya es doble, entonces actualizar el valor con el comando $ set no puede cambiar el tipo de valor doble a int cuando se utiliza la función NumberInt () o NumberLong (). Entonces, para cambiar el tipo de valor, debe actualizar todo el registro.
var re = db.data.find({"name":"zero"})
re['value']=NumberInt(0)
db.data.update({"name":"zero"}, re)
$setfuncionó al menos en Mongo 4.2, así que tal vez esto fue un error.
Cerberus
-10
Bueno, es JavaScript, así que lo que tienes en 'valor' es un Número, que puede ser un número entero o flotante. Pero no hay realmente una diferencia en JavaScript. De Learning JavaScript :
El tipo de datos numéricos
Los tipos de datos numéricos en JavaScript son números de coma flotante, pero pueden tener o no un componente fraccionario. Si no tienen un punto decimal o un componente fraccionario, se tratan como números enteros: números enteros de base 10 en un rango de –2 53 a 2 53 .
En realidad eso no es cierto. Si bien JS no ve la diferencia, tan pronto como se conecte a mongo desde otro idioma (por ejemplo, Java), sentirá la diferencia.
Omri Spector
2
Mi aplicación se ha roto en diferentes puntos solo por una razón, int se guarda y se devuelve como flotante. Sospecho que la causa debe ser algunas inserciones manuales que hice a través de mongo shell que usa javascript.
Respuestas:
También puedes usar NumberLong.
fuente
Una sintaxis un poco más simple (al menos en Robomongo) funcionó para mí:
fuente
Si el tipo de valor ya es doble, entonces actualizar el valor con el comando $ set no puede cambiar el tipo de valor doble a int cuando se utiliza la función NumberInt () o NumberLong (). Entonces, para cambiar el tipo de valor, debe actualizar todo el registro.
fuente
$set
funcionó al menos en Mongo 4.2, así que tal vez esto fue un error.Bueno, es JavaScript, así que lo que tienes en 'valor' es un Número, que puede ser un número entero o flotante. Pero no hay realmente una diferencia en JavaScript. De Learning JavaScript :
fuente