如何在响应mongo中查询BigDecimal的类似查询

时间:2017-02-08 10:58:02

标签: mongodb scala reactivemongo

我正在使用ReactiveMongo,我想在MongoDB中创建一个与数字( BigDecimal )执行查询的查询。例如:4321.3456之类的整数应与4321.34匹配。

以下 2次查询可以在MongoShell上实现此目的:

 db.employee.find({"$where":"/^4321.34.*/.test(this.salary)"})

 db.collection.find({ 
    "$where": function() { 
        return Math.round(this.salary * 100)/ 100 === 1.12; 
    }
})

但是,我找不到使用ReactiveMongo执行此查询的方法。

如何使用ReactiveMongo执行此类查询?

更新

我尝试过以下查询

 val filter=Json.obj("$where" -> """/^4321.34.*/.test(this.salary)"""))
 collection.find(filter).cursor[JsObject]()

1 个答案:

答案 0 :(得分:2)

在我的情况下,我确信在小数部分后我只会得到2位数,所以我做了范围查询,如

val lowerLimit = 4321.34
val upperLimit = lowerLimit + 0.01
val filter = Json.obj("$gte" -> JsNumber(lowerLimit),"$lt" -> JsNumber(upperLimit))) 
collection.find(filter).cursor[JsObject]()

只有在我们确定发送小数部分后只有两位数时,上述查询才有效。如果发送小数部分后面的三位数,我们必须val upperLimit = lowerLimit + 0.001