Không có cách nào trực tiếp để sử dụng $near
hoặc $nearSphere
và sắp xếp theo trường khác, vì cả hai toán tử này đã sắp xếp kết quả của việc thực hiện find()
. Khi bạn sắp xếp lại theo 'ngày tháng', bạn đang sắp xếp lại kết quả. Tuy nhiên, những gì bạn có thể làm là lấy kết quả từ $nearSphere
tăng dần và sắp xếp từng nhóm kết quả. Ví dụ:
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) );
}
Bạn cũng nên biết thứ tự bạn chỉ định tọa độ không gian địa lý trong các truy vấn mongodb. MongoDB sử dụng geojson spec, có tọa độ theo thứ tự X, Y, Z (tức là kinh độ, vĩ độ).