Docs Menu
Docs Home
/
MongoDBマニュアル
/ / /

$isNumber(集計)

項目一覧

  • 定義
$isNumber

$isNumber 指定された 式 が次のいずれかの数値 BSON typesに解決されるかどうかを確認します。

  • Integer

  • Decimal

  • Double

  • Long

$isNumber 次の値を返します。

  • true 式が数値に変換される場合。

  • false 式が他のBSON タイプnull 、または欠落したフィールドに解決される場合。

$isNumber には次の演算子式の構文があります。

{ $isNumber: <expression> }

引数には任意の有効なを使用できます。

Tip

以下も参照してください。

テスト データを入力するには、 examples.sensorsコレクションに対して次の操作を実行します。

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) ]}
])

次の集計では、 $addFields集計ステージを使用して各ドキュメントに次のフィールドを追加します。

  • isNumber - readingの値が整数、小数点、double 型、long 型のいずれであるかを示します。

  • type - readingの BSON タイプを示します。

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

この集計操作は、次の結果を返します。

{ "_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" }

gradesコレクションには、成績に関するデータが含まれています。 gradeフィールドには、string のレターグレードまたは数値のポイント値を保存できます。

db.getSiblingDB("examples").grades.insertMany([
{
"student_id" : 457864153,
"class_id" : "01",
"class_desc" : "Algebra",
"grade" : "A"
},
{
"student_id" : 457864153,
"class_id" : "02",
"class_desc" : "Chemistry",
"grade" : 3.0
},
{
"student_id" : 978451637,
"class_id" : "03",
"class_desc" : "Physics",
"grade" : "C"
},
{
"student_id" : 978451637,
"class_id" : "04",
"class_desc" : "English",
"grade" : 4.0
}
])

次の集計では、 $addFieldsステージを使用して、そのコースの数値成績を含むpointsフィールドを追加します。 ステージでは$cond演算子を使用して、 $isNumberの出力に基づいてpointsの値を設定します。

  • trueの場合、 gradesにはすでに数値ポイント値が含まれています。 pointsgradesと等しく設定します。

  • falseの場合、 gradesには string 文字の値が含まれます。 $switchを使用してレターグレードを同等のポイント値に変換し、 pointsに割り当てます。

次に、集計パイプラインは$groupステージを使用してstudent_idでグループ化し、学生のaverage GPA を計算します。

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"
}
}
}
])

集計パイプラインは、その生徒のGPA成績の平均を持つ一意のstudent_idごとに 1 つのドキュメントを出力します。

{ "_id" : 457864153, "GPA" : 3.5 }
{ "_id" : 978451637, "GPA" : 3 }

戻る

$isArray

項目一覧