Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ / /

$isNumber (agregação)

Nesta página

  • Definição
  • Exemplo
$isNumber

$isNumber verifica se aexpressão especificada é resolvida para um dos seguintes tipos de BSON numéricos:

$isNumber Devoluções:

  • true se a expressão resolver para um número.

  • false se a expressão resolver para qualquer outro tipo de BSON, null ou um campo ausente.

$isNumber tem a seguinte sintaxe de expressão do operador:

{ $isNumber: <expression> }

O argumento pode ser qualquer expressãoválida.

Dica

Veja também:

Execute a seguinte operação na collection examples.sensors para preencher os dados de teste:

db.getSiblingDB("examples").sensors.insertMany([
{ "_id" : 1, "reading" : NumberDecimal(26.0) },
{ "_id" : 2, "reading" : NumberLong(25.0) },
{ "_id" : 3, "reading" : NumberInt(24) },
{ "_id" : 4, "reading" : 24.0 },
{ "_id" : 5, "reading" : "24" },
{ "_id" : 6, "reading" : [ NumberDecimal(26) ]}
])

A aggregation a seguir usa o estágio de aggregation $addFields para adicionar os seguintes campos a cada documento:

  • isNumber - Indica se o valor de reading é um número inteiro, decimal, duplo ou longo.

  • type - Indica o tipo de BSON de reading.

db.sensors.aggregate([{
$addFields : {
"isNumber" : { $isNumber : "$reading" },
"hasType" : {$type : "$reading"}
}
}])

A operação de aggregation retorna os seguintes resultados:

{ "_id" : 1, "reading" : NumberDecimal("26.0000000000000"), "isNum " : true, "type" : "decimal" }
{ "_id" : 2, "reading" : NumberLong(25), "isNum " : true, "type" : "long" }
{ "_id" : 3, "reading" : 24, "isNum " : true, "type" : "int" }
{ "_id" : 4, "reading" : 24, "isNum " : true, "type" : "double" }
{ "_id" : 5, "reading" : "24", "isNum " : false, "type" : "string" }
{ "_id" : 6, "reading" : [ NumberDecimal("26.0000000000000") ], "isNum " : false, "type" : "array" }

A collection grades contém dados sobre as notas dos alunos. O campo grade pode armazenar uma nota de letra de string ou um valor de ponto numérico.

db.getSiblingDB("examples").grades.insertMany([
{
"student_id" : 457864153,
"class_id" : "M044",
"class_desc" : "Introduction to MongoDB 4.4",
"grade" : "A"
},
{
"student_id" : 457864153,
"class_id" : "M103",
"class_desc" : "Basic Cluster Administration",
"grade" : 3.0
},
{
"student_id" : 978451637,
"class_id" : "M320",
"class_desc" : "MongoDB Data Modeling",
"grade" : "C"
},
{
"student_id" : 978451637,
"class_id" : "M001",
"class_desc" : "MongoDB Basics",
"grade" : 4.0
}
])

A aggregation a seguir usa o estágio $addFields para adicionar um campo points contendo o valor numérico da nota desse curso. O estágio usa o operador $cond para definir o valor de points com base na saída de $isNumber:

  • Se true, grades já contém o valor de ponto numérico. Defina points como igual a grades.

  • Se false, grades contém um valor de letra de string. Use $switch para converter a nota de letra em seu valor equivalente em pontos e atribua a points.

Em seguida, o aggregation pipeline usa o estágio $group para agrupar em student_id e calcular o GPA average do aluno.

db.getSiblingDB("examples").grades.aggregate([
{
$addFields: {
"points" : {
$cond : {
if : { $isNumber : "$grade" },
then: "$grade" ,
else: {
$switch : {
branches: [
{ case: {$eq : ["$grade" , "A"]}, then : 4.0 },
{ case: {$eq : ["$grade" , "B"]}, then : 3.0 },
{ case: {$eq : ["$grade" , "C"]}, then : 2.0 },
{ case: {$eq : ["$grade" , "D"]}, then : 1.0 },
{ case: {$eq : ["$grade" , "F"]}, then : 0.0 }
]
}
}
}
}
}
},
{
$group : {
_id : "$student_id",
GPA : {
$avg : "$points"
}
}
}
])

O aggregation pipeline gera um documento por student_id exclusivo com a média de pontos do GPA do aluno:

{ "_id" : 457864153, "GPA" : 3.5 }
{ "_id" : 978451637, "GPA" : 3 }
← $isArray (agregação)

Nesta página