「Location」フィールドを持つモデルイベントがあります。場所のリストに「距離」を挿入する方法
私たちが達成したいのは、緯度/経度座標に近いクエリを指定すると、リストの各結果に、distance
というフィールドがあります。これは、指定された座標からlocation.geo
結果セット内の各オブジェクト
KeystoneJSロケーションタイプ定義には、underscore methods for thisがあります。
しかし、これをリスト内の各結果の「仮想」として注入する方法を理解することはできません。
要求されたLat/Lonをアンダースコアメソッドに渡して結果リストに挿入する方法については、誰も知りませんか?
var q = Event.paginate({ page: req.query.page || 1, perPage: req.query.max || 20 })
.where('eventDate').gt(since)
.where('state').equals('published')
.sort("eventDate")
if (req.query.lon && req.query.lat) {
var coords = [req.query.lon, req.query.lat];
var maxD = (req.query.maxDistance || 5)/6371;
q = q.where('location.geo')
.near({ center: coords, maxDistance: maxD, spherical:true })
}
q.exec(function(err, items) {
if (err) return res.apiError('database error', err);
res.apiResponse({
events: items
});
});
非常にお手伝いをしていただきありがとうございます。私は問題の一部が '.paginate'関数であると考えています。これは、リストアイテムをModelオブジェクトとして返さないので、' items.results'のオブジェクトを繰り返し処理すると、私のモデルメソッドが機能していません。これ以上深く掘り下げる必要があります。 –