0

mongoDBで近接度と日付でソートする方法は? これを試しました。しかし、それらは日付でソートするだけです:

   coll.find({'date':{$gte:date},'location':{$nearSphere:[lat,lng]}}).sort({'date':1}).execFind(function (err, docs) {})

助けてくれてありがとう。

4

2 に答える 2

6

$nearorを使用$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仕様を使用します。

于 2013-09-16T19:35:56.417 に答える