दिलचस्प समस्या। मैं नहीं जानता कि क्या आप इसे एक ही प्रश्न में कर सकते हैं, लेकिन आप इसे दो में कर सकते हैं:
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);
फिर आप बस जांचें कि दोनों में से किस दस्तावेज़ में ratio
है लक्ष्य पूर्णांक के सबसे निकट।
MongoDB 3.2 अपडेट
3.2 रिलीज़ $abs
. के लिए समर्थन जोड़ता है एब्सोल्यूट वैल्यू एग्रीगेशन ऑपरेटर जो अब इसे एक ही aggregate
. में करने की अनुमति देता है क्वेरी:
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}
])