【问题标题】:Rounding floats within an aggregate function in PHP?PHP中聚合函数内的舍入浮点数?
【发布时间】:2017-06-23 19:57:18
【问题描述】:

是否可以使用 PHP 的内置 round 函数在 $project 数组中执行此操作?

我尝试将round 函数中的输出值括到2 个小数位:

"Energy" => round(array('$multiply' => array("$energy", 10)), 2), 

我得到的输出错误是这样的:

类型:MongoDB\Driver\Exception\RuntimeException

代码:16406

消息:顶级 _id 字段是当前唯一支持排除的字段

文件:C:\wamp\www\DRM\vendor\mongodb\mongodb\src\Operation\Aggregate.php 线路:168

目前我有一个单独的解析方法来处理所有的舍入,但我想在 PHP 的聚合函数中进行。

这可能吗?我知道 MongoDB 没有圆形,但有一个外部库。

【问题讨论】:

  • round 接受 float 而不是数组,所以这无济于事。
  • 也许我在基本层面上误解了一些东西,但是当我没有圆形函数时,我在 JSON 中的输出是 "Energy": 323.2222 这是一个浮点数,对吗?
  • @JonStirling 这个构造函数特定于 mongo php 驱动程序
  • @profesor79 什么构造函数?这与round 函数有什么关系?

标签: php mongodb aggregation-framework


【解决方案1】:

mongo 还没有运行能力。

as per this answer,您可以在聚合管道中添加额外的步骤以使其四舍五入 - 在 mongo shell 代码下方:

> 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 }

jira ticket

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-07
    相关资源
    最近更新 更多