Fungsi eksternal tidak berfungsi dengan kerangka kerja agregasi. Semuanya diuraikan ke BSON pada input, jadi tidak ada JavaScript atau apa pun yang diizinkan. Ini semua pada dasarnya diproses dari definisi "operator" BSON ke implementasi kode C++ asli sehingga sangat cepat.
Apa yang terjadi adalah "mengubah" logika yang Anda harapkan menjadi apa yang dapat diproses oleh kerangka kerja agregasi. Sebenarnya ada operator "logis" seperti $or dan $and yang bekerja dalam konteks ini:
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"
]
}
}}
])
Jadi tidak ada fungsi eksternal, cukup implementasikan logika dengan operator yang disediakan oleh kerangka kerja agregasi. Selain implementasi logika dasar ada $not untuk "membalikkan" ligic dan $cond yang bertindak sebagai "ternary" untuk memberikan hasil yang berbeda dari true/false evaluasi.