sql >> Databasteknik >  >> NoSQL >> MongoDB

mongodb - Hitta dokument med närmaste heltalsvärde

Intressant problem. Jag vet inte om du kan göra det i en enda fråga, men du kan göra det på två:

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

Sedan kollar du bara vilket av de två dokumenten som har ratio närmast målheltalet.

MongoDB 3.2-uppdatering

Utgåvan 3.2 lägger till stöd för $abs absolutvärdesaggregationsoperator som nu tillåter detta att göras i en enda aggregate fråga:

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. Hur fungerar ServiceStack Redis för att hämta data

  2. Importera data till en MongoDB-instans

  3. MongoDB Databas Automation Basics Använda Chef

  4. Hur man använder mongoose Promise - mongo