MongoDB - 如何将浮点值截断为一个或两个小数点?

时间:2018-03-21 10:51:25

标签: mongodb mongodb-query aggregation-framework

让我们说这是查询:

db.movies.aggregate([
  {$match: {languages: "English", cast:{$exists:true}}},

  {$unwind: "$cast"},

  {$group: {_id: "$cast", numFilms:{$sum: 1}, average:{$avg: "$imdb.rating"}   
  }},

  {$sort: {numFilms:-1}},

  {$limit: 1}
])

我得到了输出:

{ "_id" : "John Wayne", "numFilms" : 107, "average" : 6.424299065420561 }

如何将average截断为单/双小数点?我希望看到这样的输出:

{ "_id" : "John Wayne", "numFilms" : 107, "average" : 6.42 }

我尝试了这个post,但似乎我无法通过$avg运算符做同样的事情。谁能告诉我如何实现这一目标?

请不要直接在前面提到的帖子上标记为重复帖子,这不会回答我在这里处理$avg运营商的问题。

2 个答案:

答案 0 :(得分:3)

您可以使用$project阶段,$trunc$multiply之前和$divide来处理小数位。

例如,如果我们添加以下内容:

db.test.insertMany([{
    number: 123.456
}, {
    number: 456.789
}, {
    number: 123
}]);

我们可以使用以下内容运行聚合:

db.test.aggregate([{
    $project: {
        number: {
            $divide: [{
                $trunc: {
                    $multiply: ["$number", 100]
                }
            }, 100]
        }
    }
}])

哪会给我们:

{ "_id" : ObjectId("5ab23dcb8094b7e4427b43f3"), "number" : 123.45 }
{ "_id" : ObjectId("5ab23dcb8094b7e4427b43f4"), "number" : 456.78 }
{ "_id" : ObjectId("5ab23dcb8094b7e4427b43f5"), "number" : 123 }

答案 1 :(得分:0)

$project : {
    artistAmt : {
        $divide: [{
            $trunc: {
                $multiply: ["$earnedAmount", 100]
            }
        }, 100]
    }
}    
before : "artistAmt": 1361.8100000000002
after : "artistAmt": 1361.81