2017-02-08 5 views
2

Abfrage Ich verwende ReactiveMongo, ich möchte eine Abfrage erstellen, die wie Abfrage mit Zahlen (BigDecimal) in MongoDB ausführt. Zum Beispiel: ganze Zahl wie 4321.3456 sollte durch 4321.34 übereinstimmen.Wie in reactive Mongo für gleiche Abfrage für BigDecimal

Die folgende 2 Abfragen Arbeit auf MongoShell dies zu erreichen:

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

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

Aber ich konnte nicht einen Weg finden, diese Abfrage mit ReactiveMongo auszuführen.

Wie kann ich solche Abfragen mit ReactiveMongo ausführen?

UPDATE

Ich habe folgende Abfrage versucht

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

Was haben Sie schon versucht? – cchantep

+0

@cchanstep Ich habe meine Frage aktualisiert –

+0

@cchanstep Ich habe meine Frage erneut aktualisiert –

Antwort

1

In meinem Fall war ich sicher, dass ich nur zwei Nachkommastellen Teil bekommen, damit ich Bereich Abfrage tat wie

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

Die obige Abfrage funktioniert nur, wenn wir sicher sind, dass nur zwei Ziffern nach dem Dezimalteil gesendet werden. Wenn drei Stellen nach dem Dezimalteil gesendet werden, müssen wir val upperLimit = lowerLimit + 0.001 tun.

Verwandte Themen