Trong MongoDB, $cond
toán tử đường ống tổng hợp đánh giá một biểu thức boolean và trả về một trong hai biểu thức trả về đã chỉ định, tùy thuộc vào việc liệu biểu thức boolean có phải là true
hay không hoặc false
.
$cond
toán tử chấp nhận hai cú pháp:cú pháp tốc ký và cú pháp tốc ký. Dưới đây là các ví dụ về từng loại.
Ví dụ
Giả sử chúng ta có một bộ sưu tập có tên là pets
với tài liệu sau:
{ "_id" : 1, "name" : "Fetch", "type" : "Dog", "weight" : 20, "height" : 30 }
Cú pháp tốc ký
Dưới đây là một ví dụ về việc áp dụng $cond
tới tài liệu đó bằng cú pháp viết tay:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: { if: { "$type": "Dog" }, then: "Yes", else: "No" }
}
}
}
]
)
Kết quả:
{ "isCanine" : "Yes" }
Trong ví dụ này, chúng tôi đã so sánh type
trường thành một giá trị theo nghĩa đen.
Trong ví dụ sau, chúng tôi so sánh hai trường trong tài liệu.
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: {
if: {
$gte: [ "$weight", "$height" ] },
then: "Fat",
else: "Skinny"
}
}
}
}
]
)
Kết quả:
{ "bodyType" : "Skinny" }
Cú pháp viết tắt
$cond
toán tử cũng chấp nhận một cú pháp viết tắt để làm cho mã của bạn ngắn gọn hơn.
Viết tắt về cơ bản liên quan đến việc loại bỏ if
, then
và else
từ khóa.
Khi bạn làm điều này, bạn cần phải đặt các biểu thức trong một mảng.
Trong ví dụ này, chúng tôi viết lại ví dụ đầu tiên để sử dụng cú pháp viết tắt:
db.pets.aggregate(
[
{ $project: {
_id: 0,
isCanine: {
$cond: [ { "$type": "Dog" }, "Yes", "No" ]
}
}
}
]
)
Kết quả:
{ "isCanine" : "Yes" }
Và đây là ví dụ thứ hai sử dụng tốc ký:
db.pets.aggregate(
[
{ $project: {
_id: 0,
bodyType: {
$cond: [
{ $gte: [ "$weight", "$height" ] },
"Fat",
"Skinny"
]
}
}
}
]
)
Kết quả:
{ "bodyType" : "Skinny" }