Các chức năng bên ngoài không hoạt động với khung tổng hợp. Mọi thứ đều được phân tích cú pháp thành BSON trên đầu vào, vì vậy không có JavaScript hoặc bất kỳ thứ gì khác được phép. Tất cả điều này về cơ bản được xử lý từ định nghĩa "toán tử" BSON đến triển khai mã C ++ gốc nên nó thực sự nhanh chóng.
Điều này xảy ra là "chuyển đổi" logic mong đợi của bạn thành những gì mà khung tổng hợp có thể xử lý. Trên thực tế, có các toán tử "logic" như $or
và $and
hoạt động trong ngữ cảnh này:
db.collection.aggregate([
{ "$project": {
"_id": 1,
"status": {
"$cond": [
{ "$or": [
// Your first set of rules requires "false" for "flag1" or
// "flag2" and "true" for "flag3"
{ "$and": [
{ "$not": [
{ "$or": [ "$flag1", "$flag2" ] },
]},
"$flag3"
]},
// Your second set of rules requires "true" for "flag1" or
// "flag2" and "false" for "flag3"
{ "$and": [
{ "$or": [ "$flag1", "$flag2" ] },
{ "$not": [ "$flag3" ] }
]},
]},
"ok",
"broken"
]
}
}}
])
Vì vậy, không có chức năng bên ngoài, chỉ thực hiện logic với các toán tử mà khung tổng hợp cung cấp. Ngoài các triển khai logic cơ bản còn có $not
để "đảo ngược" ligic và $cond
hoạt động như một "bậc ba" để cung cấp kết quả khác với true/false
đánh giá.