Trong MongoDB, bạn có thể sử dụng $type
toán tử truy vấn phần tử để lọc tập hợp tài liệu dựa trên kiểu BSON. Nó chỉ trả về những tài liệu có loại BSON cụ thể trong một trường cụ thể.
Bạn cung cấp trường và loại BSON và $type
sẽ trả lại tất cả các tài liệu phù hợp.
Ví dụ
Giả sử chúng ta chèn các tài liệu sau vào một bộ sưu tập có tên là 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 },
])
Mỗi tài liệu chứa một nhân viên cùng với thù lao của nhân viên đó.
Tuy nhiên, trong khi mỗi tài liệu có một remuneration
, chúng tôi có thể thấy rằng không có sự nhất quán giữa các tài liệu liên quan đến loại BSON đang được sử dụng trong trường này.
Chúng ta có thể sử dụng $type
toán tử truy vấn để chỉ trả lại những tài liệu có remuneration
trường thuộc một loại BSON nhất định.
Ví dụ:
db.employees.find( { remuneration: { $type: "double" } } )
Kết quả:
{ "_id" : 3, "name" : "Fritz", "remuneration" : 25000 }
Trong trường hợp này, chỉ một tài liệu có loại BSON gấp đôi trong remuneration
trường.
Hãy xem những cái nào chứa chuỗi:
db.employees.find( { remuneration: { $type: "string" } } )
Kết quả:
{ "_id" : 1, "name" : "Sandy", "remuneration" : "Too Much!!!" } { "_id" : 5, "name" : "Beck", "remuneration" : "10% commission" } { "_id" : 6, "name" : "Peter", "remuneration" : "70K" }
Số number
Bí danh
Bạn có thể sử dụng number
bí danh như một cách thuận tiện để trả về các tài liệu có chứa kiểu số.
Bí danh số khớp với các loại BSON sau:
-
double
-
32-bit integer
-
64-bit integer
-
decimal
Ví dụ:
db.employees.find( { remuneration: { $type: "number" } } )
Kết quả:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 } { "_id" : 3, "name" : "Fritz", "remuneration" : 25000 } { "_id" : 4, "name" : "Chris", "remuneration" : NumberDecimal("45000.75") }
Kiểm tra nhiều loại
Bạn có thể kiểm tra nhiều loại bằng cách cung cấp một loạt các loại BSON.
Ví dụ:
db.employees.find( {
remuneration: { $type: ["double", "int", "null"] }
} )
Kết quả:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 } { "_id" : 3, "name" : "Fritz", "remuneration" : 25000 } { "_id" : 7, "name" : "Homer", "remuneration" : null }
Lọc theo số
Mỗi loại BSON có một số và bí danh tương ứng (như được nêu trong tài liệu MongoDB).
Các ví dụ trước sử dụng bí danh. Ngoài ra, bạn có thể sử dụng số thay vì bí danh loại BSON.
Ví dụ:
db.employees.find( {
remuneration: { $type: [1, 16, 10] }
} )
Kết quả:
{ "_id" : 2, "name" : "Sarah", "remuneration" : 128000 } { "_id" : 3, "name" : "Fritz", "remuneration" : 25000 } { "_id" : 7, "name" : "Homer", "remuneration" : null }
Trong trường hợp này, tôi đã cung cấp một mảng số tương ứng với double
, int
và null
(trả về kết quả giống như ví dụ trước).
Trước MongoDB 3.2, chỉ các số được chấp nhận với $type
toán tử truy vấn. Bí danh chuỗi chỉ được chấp nhận kể từ MongoDB 3.2.
Trả về loại trường
Ngoài ra còn có một $type
nhà điều hành đường ống tổng hợp cho phép bạn nhận loại BSON của giá trị của trường.