AI エージェント向け: ドキュメントインデックスは https://www.mongodb.com/ja-jp/docs/llms.txt で利用できます。すべてのページの markdown バージョンは、いずれかの URL パスに .md を追加することで利用できます。

$isNumber(式演算子)

$isNumber

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

$isNumber 次の値を返します。

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

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

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

{ $isNumber: <expression> }

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

Tip

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

db.getSiblingDB("examples").sensors.insertMany([ { "_id" : 1, "reading" : Decimal128("26.0") }, { "_id" : 2, "reading" : Long(25) }, { "_id" : 3, "reading" : Int32(24) }, { "_id" : 4, "reading" : 24.0 }, { "_id" : 5, "reading" : "24" }, { "_id" : 6, "reading" : [ Decimal128("26") ]}])

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

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

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

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

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

{ "_id" : 1, "reading" : Decimal128("26.0000000000000"), "isNum " : true, "type" : "decimal" }{ "_id" : 2, "reading" : Long(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" : [ Decimal128("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にはすでに数値ポイント値が含まれています。 pointsをgradesと等しく設定します。

  • 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 }
このページを評価

項目一覧