sql >> Databáze >  >> NoSQL >> MongoDB

mongodb - Najít dokument s nejbližší celočíselnou hodnotou

Zajímavý problém. Nevím, jestli to zvládnete v jediném dotazu, ale můžete to udělat ve dvou:

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

Pak už jen zkontrolujete, který z těchto dvou dokumentů má ratio nejblíže cílovému celému číslu.

Aktualizace MongoDB 3.2

Verze 3.2 přidává podporu pro $abs operátor agregace absolutních hodnot, který to nyní umožňuje v jediném aggregate dotaz:

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


  1. C# mongo dotazy s řetězci json

  2. Znovu prozkoumat agregovaný návrat 5 nejlepších z každé skupiny

  3. Najděte dokumenty v MongoDB, jejichž pole pole je podmnožinou pole dotazů

  4. Vyhledávací řetězec se speciálními znaky v dokumentu MongoDB