Interesujący problem. Nie wiem, czy można to zrobić w jednym zapytaniu, ale można to zrobić w dwóch:
var x = 1; // given integer
closestBelow = db.test.find({ratio: {$lte: x}}).sort({ratio: -1}).limit(1);
closestAbove = db.test.find({ratio: {$gt: x}}).sort({ratio: 1}).limit(1);
Wtedy po prostu sprawdzić, który z dwóch docs ma ratio
najbliżej liczby całkowitej docelowej.
MongoDB 3.2 Aktualizacja
3,2 wydaniu dodano wsparcie dla operatora agregacji $abs
wartości absolutne, które teraz pozwala to być zrobione w jednym aggregate
zapytania:
var x = 1;
db.test.aggregate([
// Project a diff field that's the absolute difference along with the original doc.
{$project: {diff: {$abs: {$subtract: [x, '$ratio']}}, doc: '$$ROOT'}},
// Order the docs by diff
{$sort: {diff: 1}},
// Take the first one
{$limit: 1}
])
I rozważał zastosowanie geolokalizacji w ten sposób ... Myślę, że mam zamiar dać ten strzał. Wartość stosunku jest w rzeczywistości współczynnikiem kształtu obrazu, więc mogę traktować szerokość x wysokość jako zapytanie wymiarowe. – DeaconDesperado