Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
mongodb,按地理位置和日期排序?_Mongodb_Date_Sorting_Proximity - Fatal编程技术网

mongodb,按地理位置和日期排序?

mongodb,按地理位置和日期排序?,mongodb,date,sorting,proximity,Mongodb,Date,Sorting,Proximity,如何在mongoDB中按距离和日期排序? 我试过这个。但它们只是按日期排序: coll.find({'date':{$gte:date},'location':{$nearSphere:[lat,lng]}}).sort({'date':1}).execFind(function (err, docs) {}) 非常感谢您的帮助。没有直接的方法可以使用$near或$nearSphere并按另一个字段排序,因为这两个操作符都已经对执行find()的结果进行了排序。当您再次按“日期”排序时,

如何在mongoDB中按距离和日期排序? 我试过这个。但它们只是按日期排序:

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

非常感谢您的帮助。

没有直接的方法可以使用
$near
$nearSphere
并按另一个字段排序,因为这两个操作符都已经对执行
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) );
}
函数sortByDate(a,b){返回a.date-b.date;}
//一次要获取多少个结果
变量itersize=10;
//这将保存最终的双向排序结果
var sorted_results=新数组();

对于(var i=0,last=db.coll.count();i没有直接的方法使用
$near
$nearSphere
并按另一个字段排序,因为这两个操作符都已经对执行
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) );
}
函数sortByDate(a,b){返回a.date-b.date;}
//一次要获取多少个结果
变量itersize=10;
//这将保存最终的双向排序结果
var sorted_results=新数组();

对于(var i=0,last=db.coll.count();i建议在聚合中使用$geoNear:

您可以在聚合中根据日期和距离进行排序:

    coll.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ lat, lng ] },
        key: "location",
        spherical: true,
        distanceField: "dist.calculated",
        query: { "date": {"$gte": date} }
     }
   },
   {$sort: {"dist.calculated":1, "date": 1}}
])

建议在聚合中使用$geoNear:

您可以在聚合中根据日期和距离进行排序:

    coll.aggregate([
   {
     $geoNear: {
        near: { type: "Point", coordinates: [ lat, lng ] },
        key: "location",
        spherical: true,
        distanceField: "dist.calculated",
        query: { "date": {"$gte": date} }
     }
   },
   {$sort: {"dist.calculated":1, "date": 1}}
])