2017-02-08 2 views
2

Я использую ReactiveMongo, я хочу создать запрос, который выполняет как запрос с номерами (BigDecimal) в MongoDB. Например: целое число, например 4321.3456, должно соответствовать 4321.34.Как запросить в реактивном mongo для подобного запроса для BigDecimal

Следующая 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?

UPDATE

Я попытался следующий запрос

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

Что вы уже пробовали? – cchantep

+0

@cchantep Я обновил свой вопрос –

+0

@cchantep Я обновил свой вопрос снова –

ответ

1

В моем случае я был уверен, что я буду получать только 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.