У меня есть коллекция с такими документами:
{
"_id" : ObjectId("5a8ec4620cd3c2a4062548ec"),
"start" : 20,
"end" : 80
}
, и я хочу показать документы, которые перекрывают определенный процент (50%) с интервалом (startInterval = 10, endInterval = 90).
Я вычисляю перекрывающий участок по следующей формуле:
min(end , endInterval) - max(start, startInterval ) / (endInterval - startInterval)
В этом примере: min (80,90) - max (20,10) / (90-10) = (80-20) / 80 = 0,75 -> 75% Затем этот документ будет показан, так как 75% больше, чем 50%
Я выразил эту формулу в оболочке монго как:
db.getCollection('variants').find(
{
$expr: {
$gt: [
{
$divide: [
{
$subtract: [
{ $min: [ "$end", endInterval ] }
,
{ $max: [ "$start", startInterval ] }
]
}
,
{ $subtract: [ endInterval, startInterval ] }
]
}
,
overlap
]
}
}
)
где
перекрытие = 0,5, startInterval = 10 и endInterval = 90
В оболочке Монго работает нормально.
Я прошу эквивалентный способ вычисления этогоиспользуя Spring Data Criteria, поскольку функциональность $ expr, которую я использовал в оболочке mongo, все еще должна быть реализована в Spring Data Mongo.В настоящее время я использую Spring Boot 2.0.0, Spring Data MongoDb 2.0.5 и mongodb 3.6.
Большое спасибо за ваше время.