如何在MongoDB中存储浮点值

时间:2018-01-11 13:03:30

标签: mongodb laravel

我使用jenssegers/laravel-mongodb包(对于Laravel),我试图将浮点值存储在数据库中,这样我就可以对它们进行排序,但它总是将它们存储为字符串。我尝试使用$casts属性,我尝试直接投射,例如$some_value = (float)$value;,但它不起作用。

是否有可能在调用orderBy函数时强制转换属性,换句话说,是否可以欺骗Eloquent,因此它将行命令为float,而不是字符串(我试图用mutator修复它但仍然没有进展)。

编辑:

这是我使用的变种器。它适用于" int"部分,但是当它浮动时,rate将被转换为字符串。 我尝试将所有内容转换为浮动,但它没有帮助

public function setRateAttribute($value)
{
    if(strpos($value, ".") !== false or is_float($value)) {
        $this->attributes['rate'] = (float)$value;
    } else {
        $this->attributes['rate'] = (int)$value;
    }
}

EDIT2:

$c = new \App\Contractor();
$c->rate = "1.5";
$c->save();

这是php artisan tinker的示例,在应用程序中仅与其他字段相同。 问题是某些条目转换为float但有些条目是string。我无法随时重现它,它是随机发生的。

当我遍历所有条目并var_dump仅率:

时,这是示例响应
string(5) "16.67"
string(5) "33.33"
string(5) "24.44"
string(5) "33.33"
string(5) "33.33"
string(5) "27.78"
string(5) "27.78"
string(4) "8.89"
string(4) "6.67"
string(5) "22.22"
string(5) "16.67"
int(0)
float(1.5)
float(1.5)

1 个答案:

答案 0 :(得分:-1)

MongoDB不直接支持float;它有两倍,所以你可以使用 $ some_value =(double)$ value;

您需要确保语法正确。