sql >> Database >  >> NoSQL >> MongoDB

mongodb - Zoek document met dichtstbijzijnde gehele waarde

Interessant probleem. Ik weet niet of je het in een enkele zoekopdracht kunt doen, maar je kunt het in twee doen:

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

Dan controleer je gewoon welke van de twee documenten de ratio . heeft dichtst bij het doelgetal.

MongoDB 3.2-update

De 3.2-release voegt ondersteuning toe voor de $abs aggregatie-operator voor absolute waarden waarmee dit nu in een enkele aggregate kan worden gedaan vraag:

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. ioredis Sleutel met bijpassend patroon

  2. Cassandra vs. MongoDB:welke moet je kiezen?

  3. Kan ik '$set' gebruiken in een ingesloten document wanneer ik variabele gebruik als gearchiveerde naam in MongoDB?

  4. Sorteeraggregatie addToSet resultaat