mongoDBで近接度と日付でソートする方法は? これを試しました。しかし、それらは日付でソートするだけです:
coll.find({'date':{$gte:date},'location':{$nearSphere:[lat,lng]}}).sort({'date':1}).execFind(function (err, docs) {})
助けてくれてありがとう。
$near
orを使用$nearSphere
して別のフィールドで並べ替える直接的な方法はありません。これらの演算子は両方とも、既に a を実行した結果を並べ替えているためfind()
です。「日付」で再度ソートすると、結果が再ソートされます。ただし、できることは、$nearSphere
段階的に結果を取得し、結果の各セットを並べ替えることです。例えば:
function sortByDate(a, b) { return a.date - b.date; }
// how many results to grab at a time
var itersize = 10;
// this will hold your final, two-way sorted results
var sorted_results = new Array();
for (var i=0, last=db.coll.count(); i<last-itersize; i+=itersize) {
var results = db.coll.find( {"date":{$gte:date},
// longitude, then latitude
"location":[lng, lat]} ).skip(i).limit(itersize).toArray();
// do date sorting app-side for each group of nearSphere-sorted results
sorted_results = sorted_results.concat( results.sort(sortByDate) );
}
また、mongodb クエリで地理空間座標を指定する順序にも注意する必要があります。MongoDB は、X、Y、Z の順序 (つまり、経度、緯度) で座標を処理するgeojson仕様を使用します。