sql >> Databáze >  >> NoSQL >> MongoDB

Zavolat funkci uvnitř agregátu mongodb?

Externí funkce nefungují s agregačním rámcem. Vše je na vstupu analyzováno na BSON, takže není povolen žádný JavaScript ani nic jiného. To vše je v podstatě zpracováno od definice „operátora“ BSON po implementaci nativního kódu C++, takže je to opravdu rychlé.

Z toho plyne „převod“ vaší očekávané logiky na to, co dokáže zpracovat agregační rámec. Ve skutečnosti existují „logické“ operátory jako $or a $and které fungují v tomto kontextu:

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

Takže žádné externí funkce, jen implementujte logiku s operátory, které dodává agregační framework. Kromě základních logických implementací existuje $not pro "obrácení" ligic a $cond který se chová jako "ternární", aby poskytl jiný výsledek než true/false hodnocení.



  1. MongoDB $atan

  2. Práce s klíči v redis

  3. Zavolat funkci uvnitř agregátu mongodb?

  4. Dockeru se nedaří spustit koleje