sql >> データベース >  >> NoSQL >> MongoDB

mongodbのアグリゲート内で関数を呼び出しますか?

    外部関数は集約フレームワークでは機能しません。すべてが入力時にBSONに解析されるため、JavaScriptなどは許可されません。これはすべて基本的にBSONの「演算子」定義からネイティブC++コードの実装まで処理されるため、非常に高速です。

    つまり、予想されるロジックを集約フレームワークが処理できるものに「変換」することになります。実際には、$orなどの「論理」演算子があります および$and このコンテキストで機能します:

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

    したがって、外部関数はなく、集約フレームワークが提供する演算子を使用してロジックを実装するだけです。基本的な論理実装に加えて、 $notがあります ligicと$condを「逆にする」 これは、true/falseとは異なる結果を提供するための「3値」として機能します 評価。



    1. SparkでRedis:タスクをシリアル化できません

    2. MeteorとFibers/bindEnvironment()はどうなっていますか?

    3. Windows 7マシン上のMongoDB:接続できませんでした

    4. jedis forJavaを使用してDockerRedisクラスターインスタンスに接続するにはどうすればよいですか?