我不知道如何在MongoDB中舍入一个数字。我只发现如何使用2位小数,但没有更多的小数。
"location" : {
"type" : "Point",
"coordinates" : [
-74.00568,
40.70511
]
}
这是一个坐标的例子,我需要在点之后用3个数字进行舍入。 谢谢
答案 0 :(得分:4)
对于3位小数舍入,您可以使用此公式。
$divide: [ {$trunc: { $multiply: [ "$$coordinate" , 1000 ] } }, 1000 ]
例如,使用您的示例数据,并使用此聚合:
db.getCollection('Test2').aggregate([
{ $project :
{
"location.type" : "$location.type",
"location.coordinates" :
{
$map:
{
input: "$location.coordinates",
as: "coordinate",
in: { $divide: [ {$trunc: { $multiply: [ "$$coordinate" , 1000 ] } }, 1000 ] }
}
}
}
}
])
您可以获得所需的结果。
{
"_id" : ObjectId("59f9a4c814167b414f6eb553"),
"location" : {
"type" : "Point",
"coordinates" : [
-74.005,
40.705
]
}
}
答案 1 :(得分:0)
从 Mongo 4.2
开始,有一个新的 $trunc
聚合运算符,可用于截断 number < / em> 到指定的小数 place :
{$ trunc:[
, ]}
在聚合管道中可以这样使用(在这里,我们将x
截断为3
小数位):
// db.collection.insert([{x: 1.23456}, {x: -9.87654}, {x: 0.055543}, {x: 12.9999}])
db.collection.aggregate([{ $project: { "trunc_x": { $trunc: ["$x", 3] }}}])
// [{"trunc_x": 1.234}, {"trunc_x": -9.876}, {"trunc_x": 0.055}, {"trunc_x": 12.999}]
请注意,place
参数是可选的,而省略它会导致截断为整数(即在小数点后0位截断)。
如果您对舍入而不是截断感兴趣,还请注意等效的$round
运算符。
答案 2 :(得分:0)
有了坐标(如在数组中一样),您可以将其截断2个步骤:
动起来:
{'$project':{
'lat': {'$trunc': [{ '$arrayElemAt': [ "$location.coordinates", 0 ] },2]},
'lon': {'$trunc': [{ '$arrayElemAt': [ "$location.coordinates", 1 ] },2]},
},
我假设您在坐标中的第一个值是纬度。