MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

mongodb - Localiza o documento com o valor inteiro mais próximo


Problema interessante. Não sei se você pode fazer isso em uma única consulta, mas você pode fazer em duas:
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);

Então você só verifica qual dos dois documentos tem a ratio mais próximo do inteiro de destino.

Atualização do MongoDB 3.2

A versão 3.2 adiciona suporte para o $abs operador de agregação de valor absoluto que agora permite que isso seja feito em um único aggregate inquerir:
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}
])