Di MongoDB, Anda dapat menggunakan $type
operator kueri elemen untuk memfilter kumpulan dokumen berdasarkan tipe BSON. Ini mengembalikan hanya dokumen-dokumen yang memiliki jenis BSON tertentu di bidang tertentu.
Anda memberikan bidang dan jenis BSON, dan $type
akan mengembalikan semua dokumen yang cocok.
Contoh
Misalkan kita memasukkan dokumen berikut ke dalam koleksi yang disebut employees
:
db.employees.insertMany([
{ _id: 1, name: "Sandy", remuneration: "Too Much!!!" },
{ _id: 2, name: "Sarah", remuneration: NumberInt(128000) },
{ _id: 3, name: "Fritz", remuneration: 25000 },
{ _id: 4, name: "Chris", remuneration: NumberDecimal("45000.75") },
{ _id: 5, name: "Beck", remuneration: "10% commission" },
{ _id: 6, name: "Peter", remuneration: "70K" },
{ _id: 7, name: "Homer", remuneration: null },
])
Setiap dokumen berisi karyawan beserta remunerasi karyawan tersebut.
Namun, sementara setiap dokumen memiliki remuneration
bidang, kita dapat melihat bahwa tidak ada konsistensi di seluruh dokumen sehubungan dengan jenis BSON yang digunakan di bidang ini.
Kita dapat menggunakan $type
operator kueri untuk mengembalikan hanya dokumen-dokumen yang remuneration
bidang adalah jenis BSON tertentu.
Contoh:
db.employees.find( { remuneration: { $type: "double" } } )
Hasil:
{ "_id" :3, "name" :"Fritz", "remunerasi" :25000 }
Dalam hal ini, hanya satu dokumen yang memiliki tipe BSON ganda dalam remuneration
lapangan.
Mari kita lihat mana yang berisi string:
db.employees.find( { remuneration: { $type: "string" } } )
Hasil:
{ "_id" :1, "name" :"Sandy", "remuneration" :"Terlalu Banyak!!!" }{ "_id" :5, "name" :"Beck", "remuneration" :"10% komisi" }{ "_id" :6, "name" :"Peter", "remuneration" :"70K" }
number
AliasAnda dapat menggunakan
number
alias sebagai cara mudah untuk mengembalikan dokumen yang berisi tipe numerik.Alias nomor cocok dengan jenis BSON berikut:
double
32-bit integer
64-bit integer
decimal
Contoh:
db.employees.find( { remuneration: { $type: "number" } } )
Hasil:
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :4, "nama" :"Chris", "remunerasi" :NumberDecimal("45000.75") }
Periksa Beberapa Jenis
Anda dapat memeriksa beberapa jenis dengan menyediakan larik jenis BSON.
Contoh:
db.employees.find( {
remuneration: { $type: ["double", "int", "null"] }
} )
Hasil:
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :7, "name" :"Homer", "remuneration" :null }
Filter menurut Nomor
Setiap jenis BSON memiliki nomor dan alias yang sesuai (seperti yang dijelaskan dalam dokumentasi MongoDB).
Contoh sebelumnya menggunakan alias. Sebagai alternatif, Anda dapat menggunakan nomor tersebut alih-alih alias tipe BSON.
Contoh:
db.employees.find( {
remuneration: { $type: [1, 16, 10] }
} )
Hasil:
{ "_id" :2, "name" :"Sarah", "remuneration" :128000 }{ "_id" :3, "name" :"Fritz", "remuneration" :25000 }{ "_id" :7, "name" :"Homer", "remuneration" :null }
Dalam hal ini, saya memberikan array angka yang sesuai dengan double
, int
, dan null
(yang mengembalikan hasil yang sama seperti contoh sebelumnya).
Sebelum MongoDB 3.2, hanya nomor yang diterima dengan $type
operator kueri. Alias string hanya diterima sejak MongoDB 3.2.
Mengembalikan Jenis Bidang
Ada juga $type
operator pipa agregasi yang memungkinkan Anda mendapatkan jenis nilai bidang BSON.