MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

encontrar por $ type number no mongodb


Existe apenas um tipo numérico em JavaScript (Number ), que é representado em binário como um número de ponto flutuante IEEE 754 (duplo).

Na especificação BSON isso será representado como um duplo (tipo 1), então você poderá encontrar com:
db.people.find({name: { $type: 1 }})

Existem alguns mongo shell helpers se você quiser inserir BSON diferentes tipos de dados :
42              // Type 1:  double (64-bit IEEE 754 floating point, 8 bytes)
NumberInt(42)   // Type 16: int32  (32-bit signed integer, 4 bytes)
NumberLong(42)  // Type 18: int64  (64-bit signed integer, 8 bytes)

Assim, por exemplo:
db.people.insert({ name: 'default', num: 42 })
db.people.insert({ name: 'NumberLong', num: NumberLong(42) })
db.people.insert({ name: 'NumberInt', num: NumberInt(42) })

As diferentes representações numéricas ainda irão corresponder se você fizer um find() em um número que pode ser representado em vários formatos (ou seja, um inteiro de 32 bits também pode ser representado como double ou int64).

Por exemplo:
db.people.find({num:42})
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f45"),
    "name" : "default",
    "num" : 42
}
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f46"),
    "name" : "NumberLong",
    "num" : NumberLong(42)
}
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f47"),
    "name" : "NumberInt",
    "num" : 42
}

No entanto, se você encontrar por $type , a representação BSON é diferente:
> db.people.find({num: { $type: 1 }})
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f45"),
    "name" : "default",
    "num" : 42
}

> db.people.find({num: { $type: 16 }})
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f47"),
    "name" : "NumberInt",
    "num" : 42
}

> db.people.find({num: { $type: 18 }})
{
    "_id" : ObjectId("50965aa3038d8c8e85fd3f46"),
    "name" : "NumberLong",
    "num" : NumberLong(42)
}