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

MongoDB集計フレームワークを使用して小数点以下第2位に四捨五入

    $roundはありません 演算子ですが、集計フレームワークでこれを行うことができます。特定の順序で行うと、通常、浮動小数点の精度の問題を回避できます。

    > db.a.save({x:1.23456789})
    > db.a.save({x:9.87654321})
    > db.a.aggregate([{$project:{ _id:0, 
             y:{$divide:[
                  {$subtract:[
                          {$multiply:['$x',100]},
                          {$mod:[{$multiply:['$x',100]}, 1]}
                  ]},
                  100]}
    }}])
    { "y" : 1.23 }
    { "y" : 9.87 }
    

    問題の既存のパイプラインを考慮して、次を置き換えます:

    {$multiply:[{$divide: ['$ActSls', '$PlnSls']},100]}
    

    {$divide:[
         {$subtract:[ 
              {$multiply:[
                 {$divide: ['$ActSls','$PlnSls']},
                 10000
              ]}, 
              {$mod:[
                 {$multiply:[{$divide: ['$ActSls','$PlnSls']}, 10000 ]},
                 1]}
              ]}, 
         100
    ]}
    

    サンプルデータポイントを使用すると、これが結果になります:

    { "ActSls" : 31, "PlnSls" : 51, "ActToPln" : 60.78 }
    { "ActSls" : 41, "PlnSls" : 51, "ActToPln" : 80.39 }
    { "ActSls" : 72, "PlnSls" : 102, "ActToPln" : 70.58 }
    


    1. AmazonLinuxにMongoDBをインストールする手順

    2. redisでnodejsを使用して文字列をスキャンする

    3. MongoDBの利点| MongoDBのデメリット

    4. Dockerを使用したMongoDBのデプロイ