MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Chiama la funzione all'interno dell'aggregato di mongodb?

Le funzioni esterne non funzionano con il framework di aggregazione. Tutto viene analizzato in BSON in input, quindi non è consentito JavaScript o altro. Tutto questo viene fondamentalmente elaborato dalla definizione di "operatore" BSON all'implementazione del codice C++ nativo, quindi è davvero veloce.

Ciò a cui si riduce è "convertire" la logica prevista in ciò che il framework di aggregazione può elaborare. Esistono infatti operatori "logici" come $or e $and che funzionano in questo contesto:

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

Quindi niente funzioni esterne, basta implementare la logica con gli operatori che fornisce il framework di aggregazione. Oltre alle implementazioni logiche di base c'è $not per "invertire" la ligic e $cond che funge da "ternario" per fornire un risultato diverso da true/false valutazione.