Rah*_*Raj 1 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}
])
Run Code Online (Sandbox Code Playgroud)
我得到的输出:
{ "_id" : "John Wayne", "numFilms" : 107, "average" : 6.424299065420561 }
Run Code Online (Sandbox Code Playgroud)
如何截断average到单/双小数点?我想看到这样的输出:
{ "_id" : "John Wayne", "numFilms" : 107, "average" : 6.42 }
Run Code Online (Sandbox Code Playgroud)
我尝试了这篇文章,但似乎我无法摆脱与$avg运算符做同样的事情。谁能告诉我如何实现这一目标?
并且请不要将前面提到的帖子直接标记为重复的帖子,这在这里没有回答我与$avg操作员有关的问题。
您可以通过实现这一目标$project的舞台$trunc,但$multiply之前并$divide应对小数位之后。
例如,如果我们添加以下内容:
db.test.insertMany([{
number: 123.456
}, {
number: 456.789
}, {
number: 123
}]);
Run Code Online (Sandbox Code Playgroud)
我们可以使用以下命令运行聚合:
db.test.aggregate([{
$project: {
number: {
$divide: [{
$trunc: {
$multiply: ["$number", 100]
}
}, 100]
}
}
}])
Run Code Online (Sandbox Code Playgroud)
这将给我们:
{ "_id" : ObjectId("5ab23dcb8094b7e4427b43f3"), "number" : 123.45 }
{ "_id" : ObjectId("5ab23dcb8094b7e4427b43f4"), "number" : 456.78 }
{ "_id" : ObjectId("5ab23dcb8094b7e4427b43f5"), "number" : 123 }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2420 次 |
| 最近记录: |