Từ MongoDB 4.0, bạn có thể sử dụng $toBool
toán tử đường ống tổng hợp để chuyển đổi một giá trị thành boolean.
Khi bạn chuyển đổi một giá trị thành boolean, kết quả sẽ là true
hoặc false
, tùy thuộc vào giá trị đầu vào.
Nói chung, đối với các giá trị số, giá trị này sẽ trả về false
nếu giá trị bằng 0 (0
) và true
cho bất kỳ giá trị nào khác.
Đối với các giá trị chuỗi, ObjectId và Date, nó sẽ luôn trả về true
.
Ví dụ
Giả sử chúng ta có một tập hợp được gọi là types
và nó chứa các tài liệu sau:
{ "_id" : ObjectId("60133e50c8eb4369cf6ad9d9"), "double" : 123.75, "string" : "123", "boolean" : true, "date" : ISODate("2020-12-31T23:30:15.123Z"), "integer" : 123, "long" : NumberLong(123), "decimal" : NumberDecimal("123.75") } { "_id" : ObjectId("60133e50c8eb4369cf6ad9da"), "double" : 0, "string" : "", "boolean" : false, "date" : null, "integer" : 0, "long" : NumberLong(0), "decimal" : NumberDecimal("0.0") }
Chúng ta có thể sử dụng $toBool
toán tử để chuyển đổi tất cả các kiểu đó thành boolean. Nếu đầu vào là boolean, thì nó chỉ trả về boolean.
db.types.aggregate(
[
{
$project:
{
_id: 0,
objectId: { $toBool: "$_id" },
double: { $toBool: "$double" },
string: { $toBool: "$string" },
boolean: { $toBool: "$boolean" },
date: { $toBool: "$date" },
integer: { $toBool: "$integer" },
long: { $toBool: "$long" },
decimal: { $toBool: "$decimal" }
}
}
]
).pretty()
Kết quả:
{ "objectId" : true, "double" : true, "string" : true, "boolean" : true, "date" : true, "integer" : true, "long" : true, "decimal" : true } { "objectId" : true, "double" : false, "string" : true, "boolean" : false, "date" : null, "integer" : false, "long" : false, "decimal" : false }
Chúng ta có thể thấy rằng tất cả các giá trị trong tài liệu đầu tiên đều trả về true
, nhưng nhiều trong tài liệu thứ hai trả về false
. Ngoài ra, giá trị ngày trả về null
vì nó null
để bắt đầu với.
Lỗi
Nếu bạn gặp lỗi, hãy thử sử dụng $convert
toán tử thay vì $toBool
. $convert
cho phép bạn xử lý lỗi mà không ảnh hưởng đến toàn bộ hoạt động tổng hợp.
$toBool
toán tử tương đương với việc sử dụng $convert
toán tử để chuyển đổi giá trị thành boolean.
Dưới đây là một ví dụ về việc sử dụng $convert
để chuyển đổi một chuỗi thành boolean ::
db.types.aggregate(
[
{
$project:
{
_id: 0,
result:
{
$convert: {
input: "$string",
to: "bool",
onError: "An error occurred",
onNull: "Input was null or empty"
}
}
}
}
]
)
Kết quả:
{ "result" : true }
Xem MongoDB $convert
để biết thêm ví dụ.