MongoDB
 sql >> Base de données >  >> NoSQL >> MongoDB

mongodb - Trouver le document avec la valeur entière la plus proche

Problème intéressant. Je ne sais pas si vous pouvez le faire en une seule requête, mais vous pouvez le faire en deux :

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);

Ensuite, il vous suffit de vérifier lequel des deux documents a le ratio le plus proche de l'entier cible.

Mise à jour MongoDB 3.2

La version 3.2 ajoute la prise en charge de $abs opérateur d'agrégation de valeur absolue qui permet désormais de le faire dans un seul aggregate requête :

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}
])