Eksterne funktioner fungerer ikke med aggregeringsrammen. Alt parses til BSON ved input, så ingen JavaScript eller andet er tilladt. Det hele behandles dybest set fra BSON "operator" definition til native C++ kode implementering, så det er virkelig hurtigt.
Det, dette kommer ned til, er at "konvertere" din forventede logik til det, som aggregeringsrammen kan behandle. Der er faktisk "logiske" operatorer såsom $or
og $and
der virker i denne sammenhæng:
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"
]
}
}}
])
Så ingen eksterne funktioner, bare implementer logikken med de operatører, som aggregeringsrammen leverer. Ud over de grundlæggende logiske implementeringer er der $not
for at "vende" ligikken og $cond
som fungerer som en "ternær" for at give et andet resultat end true/false
evaluering.