MongoDB
 sql >> Baza danych >  >> NoSQL >> MongoDB

Wywołać funkcję w agregacie mongodb?

Funkcje zewnętrzne nie działają w ramach agregacji. Wszystko jest parsowane do BSON na wejściu, więc żaden JavaScript ani nic innego nie jest dozwolone. Wszystko to jest zasadniczo przetwarzane od definicji „operatora” BSON do implementacji kodu natywnego C++, więc jest naprawdę szybkie.

Sprowadza się to do „konwertowania” oczekiwanej logiki na to, co może przetworzyć struktura agregacji. W rzeczywistości istnieją operatory „logiczne”, takie jak $or i $and które działają w tym kontekście:

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

Więc nie ma funkcji zewnętrznych, po prostu zaimplementuj logikę z operatorami, które dostarcza struktura agregacji. Oprócz podstawowych implementacji logicznych istnieje $not aby "odwrócić" ligic i $cond który działa jako „trójargument” w celu zapewnienia innego wyniku niż true/false ocena.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Jak zmienić nazwę kolekcji w mongoose.model?

  2. Sortowanie agregacji addToSet wynik

  3. Pole Mongo A większe niż pole B

  4. Mongodb ustawia unikalne pole

  5. Grupuj według wartości i warunków