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

Opkaldsfunktion inde i mongodbs aggregat?

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.



  1. MongoDB - er DBREF nødvendigt?

  2. Sådan optimeres ydeevnen af ​​ClusterControl og dens komponenter

  3. Redis Config Set med Node jS

  4. Oprettelse af multifeltindekser i Mongoose / MongoDB