Trong MongoDB, $type
toán tử đường ống tổng hợp trả về kiểu BSON của đối số của nó.
Bạn có thể sử dụng nó để tìm ra loại trường nhất định.
Ví dụ
Giả sử chúng ta có một bộ sưu tập có tên là cats
với tài liệu sau:
{ "_id" : ObjectId("60173c09c8eb4369cf6ad9e0"), "name" : "Scratch", "born" : ISODate("2021-01-03T23:30:15.123Z"), "weight" : 30 }
Chúng tôi có thể sử dụng mã sau để trả về các loại trường đó:
db.cats.aggregate(
[
{
$project:
{
_id: { $type: "$_id" },
name: { $type: "$name" },
born: { $type: "$born" },
weight: { $type: "$weight" }
}
}
]
).pretty()
Kết quả:
{ "_id" : "objectId", "name" : "string", "born" : "date", "weight" : "double" }
Ví dụ 2
Dưới đây là một ví dụ khác chứa nhiều trường thuộc các loại BSON khác nhau.
Chúng tôi có một bộ sưu tập được gọi là types
với tài liệu sau:
{ "_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 ] }
Với mục đích của bài viết này, tôi đã đặt tên cho mỗi trường để phản ánh loại BSON của nó.
Bây giờ chúng ta có thể sử dụng mã sau để trả về các loại trường đó:
db.types.aggregate(
[
{
$project:
{
_id: { $type: "$_id" },
double: { $type: "$double" },
string: { $type: "$string" },
boolean: { $type: "$boolean" },
date: { $type: "$date" },
integer: { $type: "$integer" },
long: { $type: "$long" },
decimal: { $type: "$decimal" },
object: { $type: "$object" },
array: { $type: "$array" }
}
}
]
).pretty()
Kết quả:
{ "_id" : "objectId", "double" : "double", "string" : "string", "boolean" : "bool", "date" : "date", "integer" : "int", "long" : "long", "decimal" : "decimal", "object" : "object", "array" : "array" }
Lọc theo loại
Ngoài ra còn có một $type
toán tử truy vấn phần tử cho phép bạn lọc một bộ sưu tập tài liệu dựa trên loại BSON.
Kiểm tra số
Nếu bạn chỉ muốn kiểm tra xem giá trị có phải là số hay không, hãy xem MongoDB $isNumber
.