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.