Solución:
NumberInt
De forma predeterminada, el shell mongo trata todos los números como valores de punto flotante. La cáscara de mongo proporciona el NumberInt()
constructor para especificar explícitamente enteros de 32 bits.
Número Largo
De forma predeterminada, el shell mongo trata todos los números como valores de punto flotante. La cáscara de mongo proporciona el NumberLong()
class para manejar enteros de 64 bits.
los NumberLong()
constructor acepta el long como una cadena:
NumberLong("2090845886852")
Fuente: http://docs.mongodb.org/manual/core/shell-types/
NumberLong
y NumberInt
no son tipos de datos en MongoDB sino funciones de JavaScript en el shell de MongoDB.
Los tipos de datos en MongoDB se definen en la especificación BSON: http://bsonspec.org/spec.html
Los números se almacenan como tipo 0x01 (punto flotante), tipo 0x10 (entero de 32 bits) o tipo 0x12 (entero de 64 bits).
Si inserta o actualiza un documento en el shell de MongoDB, entonces NumberLong
crea un entero de 64 bits, NumberInt
crea un entero de 32 bits y un número JavaScript normal crea un valor de punto flotante. Esto se debe a que no hay números enteros en JavaScript, solo números de punto flotante.
La salida en el shell de MongoDB muestra números de punto flotante y enteros de 32 bits como números de JavaScript, mientras que los enteros de 64 bits se muestran como llamadas a NumberLong
:
> db.inttest.insert({f: 1234, i: NumberInt("1234"), l: NumberLong("1234")})
> db.inttest.findOne()
{
"_id" : ObjectId("5396fc0db8e0b3e2dedb59b0"),
"f" : 1234,
"i" : 1234,
"l" : NumberLong(1234)
}
Los diferentes controladores de MongoDB proporcionan diferentes métodos para insertar diferentes tipos de números. Por ejemplo, el controlador C ++ crea un entero de 64 bits si agrega un long long
valor a un BSONObjectBuilder.
Las consultas coinciden siempre que los números sean iguales. En el ejemplo anterior, las consultas
> db.inttest.find({i:1234})
> db.inttest.find({l:1234})
> db.inttest.find({f:1234})
> db.inttest.find({i:NumberLong("1234")})
> db.inttest.find({l:NumberLong("1234")})
> db.inttest.find({f:NumberLong("1234")})
todos coinciden con el documento insertado.