Dari MongoDB 4.4, Anda dapat menggunakan $isNumber
operator pipa agregasi untuk memeriksa apakah suatu nilai adalah angka atau bukan.
Ia menerima ekspresi apa pun yang valid, dan mengembalikan true
jika ekspresinya adalah angka, false
jika tidak.
Khususnya, $isNumber
memeriksa apakah ekspresi diselesaikan ke salah satu jenis BSON berikut:
Integer
Decimal
Double
Long
Ini mengembalikan true
jika tidak.
Ini mengembalikan false
jika ekspresi diselesaikan ke jenis BSON lainnya, null
, atau bidang yang tidak ada.
Contoh
Misalkan kita memiliki koleksi yang disebut dogs
dengan dokumen berikut:
{ "_id" : 1, "name" : "Fetch", "weight" : 30 }
Kita dapat menggunakan kode berikut untuk melihat bidang mana yang numerik:
db.dogs.aggregate(
[
{
$project:
{
_id: { $isNumber: "$_id" },
name: { $isNumber: "$name" },
weight: { $isNumber: "$weight" }
}
}
]
)
Hasil:
{ "_id" : true, "name" : false, "weight" : true }
Kita dapat melihat bahwa _id
dan weight
bidangnya numerik, tetapi name
bidang bukan (itu string).
Contoh 2
Berikut adalah contoh lain yang berisi berbagai bidang dengan jenis BSON yang berbeda.
Misalkan kita memiliki koleksi yang disebut types
dengan dokumen berikut:
{ "_id" : ObjectId("601738d7c8eb4369cf6ad9de"), "double" : 123.75, "string" : "123", "boolean" : true, "date" : ISODate("2020-12-31T23:30:15.123Z"), "integer" : 123, "long" : NumberLong(123), "decimal" : NumberDecimal("123.75"), "object" : { "a" : 1 }, "array" : [ 1, 2, 3 ] }
Untuk tujuan artikel ini, saya memberi nama setiap bidang untuk mencerminkan jenis BSON-nya.
Kita sekarang dapat menggunakan kode berikut untuk mengembalikan true
atau false
untuk setiap bidang, tergantung pada apakah bidang tersebut berupa angka atau tidak:
db.types.aggregate(
[
{
$project:
{
_id: { $isNumber: "$_id" },
double: { $isNumber: "$double" },
string: { $isNumber: "$string" },
boolean: { $isNumber: "$boolean" },
date: { $isNumber: "$date" },
integer: { $isNumber: "$integer" },
long: { $isNumber: "$long" },
decimal: { $isNumber: "$decimal" },
object: { $isNumber: "$object" },
array: { $isNumber: "$array" }
}
}
]
).pretty()
Hasil:
{ "_id" : false, "double" : true, "string" : false, "boolean" : false, "date" : false, "integer" : true, "long" : true, "decimal" : true, "object" : false, "array" : false }