让我们说这是查询:
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
运营商的问题。
答案 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