我正在使用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]()
答案 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
。