Không có $round
nhưng bạn có thể thực hiện việc này trong khung tổng hợp - thực hiện theo thứ tự cụ thể thường sẽ tránh được các vấn đề về độ chính xác dấu phẩy động.
> 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 }
Với đường ống hiện có trong sự cố, hãy thay thế:
{$multiply:[{$divide: ['$ActSls', '$PlnSls']},100]}
với
{$divide:[
{$subtract:[
{$multiply:[
{$divide: ['$ActSls','$PlnSls']},
10000
]},
{$mod:[
{$multiply:[{$divide: ['$ActSls','$PlnSls']}, 10000 ]},
1]}
]},
100
]}
Với các điểm dữ liệu mẫu của bạn, đây là kết quả:
{ "ActSls" : 31, "PlnSls" : 51, "ActToPln" : 60.78 }
{ "ActSls" : 41, "PlnSls" : 51, "ActToPln" : 80.39 }
{ "ActSls" : 72, "PlnSls" : 102, "ActToPln" : 70.58 }