MongoDB
 sql >> Datenbank >  >> NoSQL >> MongoDB

Funktion innerhalb des Aggregats von Mongodb aufrufen?

Externe Funktionen funktionieren nicht mit dem Aggregationsframework. Alles wird bei der Eingabe in BSON geparst, daher ist kein JavaScript oder irgendetwas anderes erlaubt. Dies wird im Grunde genommen von der BSON-"Operator"-Definition bis zur nativen C++-Code-Implementierung verarbeitet, sodass es wirklich schnell geht.

Es läuft darauf hinaus, Ihre erwartete Logik in das zu „konvertieren“, was das Aggregationsframework verarbeiten kann. Es gibt tatsächlich „logische“ Operatoren wie $or und $and die in diesem Zusammenhang funktionieren:

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"
           ]
       }
    }}
])

Also keine externen Funktionen, implementieren Sie einfach die Logik mit den Operatoren, die das Aggregationsframework bereitstellt. Zusätzlich zu den grundlegenden logischen Implementierungen gibt es $not um die ligic und $cond "umzukehren". die als "ternär" fungiert, um ein anderes Ergebnis als true/false zu liefern Auswertung.