MongoDB用のmongooseを使ってExpress APIを開発しています。下のコードでは、特定の距離内にあるGeoJsonオブジェクトを検索しようとしています。最も新しいオブジェクトが最初に表示されるように並べ替え、指定された数のオブジェクトを「制限」に戻す前に特定のドキュメントにスキップします。MongooseJSのソートとスキップの修正方法
// Find all of the stacks in a given radius
router.param("range", function(req, res, next, range) {
if(range === "1") {
var radius = 8125; // Meters. (5 Miles)
} else if(range === "0") {
var radius = 45.75; // Meters. (150 Feet)
}
var skipTo = parseInt(req.params.skip);
var origin = [parseFloat(req.params.lon), parseFloat(req.params.lat)]; // [longitude, latitude]
var userLocation = { type: "Point", coordinates: origin };
var options = { maxDistance: radius,
spherical : true,
sort: {
createdAt: -1 // Sort by Date Added DESC
},
skip: skipTo, // Skip to a specific point
limit: 15 // How many returned
};
Stack.geoNear(userLocation, options, function(err, result, stats) {
if(err) return next(err);
if(!result) {
err = new Error("Not Found");
err.status = 404;
return next(err);
}
req.locals = result;
next();
});
});
私がコードを実行すると、geoNear()関数はlimit関数のように完全に機能します。私の問題は並べ替えとスキップです。ソートやスキップが無視されるような感じです。私はmongoとmongooseのドキュメントと同様のコードをオンラインで見てきました。どこでも修正を見つけることはできません。特定の地域で文書を取得しようとすると、結果が適切にスキップされ、日付順に整理されるように、どうすればよいですか?次へ
Stack.geoNear(userLocation, options, function(err, result, stats) {
:
可能な重複http://stackoverflow.com/q/24297556/3284355 – Molda
@Molda私は彼がマングースのクエリではなく凝集をやろうとしていると思います。 http://mongoosejs.com/docs/api.html#model_Model.geoNear – dyouberg
@dyoubergの質問にリンクしています。スキップはgeoでサポートされていないと言われていますが、代わりに集約を使用できます。私はマングースにあまり慣れていないので間違っているかもしれません。 – Molda