MongooseとmaxDistanceのnearクエリを使用して、指定されたgpsの場所に近い要素をフィルター処理しています。ただし、nearクエリは他のソートをオーバーライドします。私が望むのは、特定のポイントのmaxDistance内のすべての要素を見つけて、他の属性で並べ替えることです。これが私が現在やっていることの例です:
スキーマ:
mongoose.Schema({
name: {
type: String,
required: true
},
score: {
type: Number,
required: true,
default: 0
},
location: {
type: {
type: String,
default: 'Point',
},
coordinates: {
type: [Number]
}
},
....
});
クエリ:
model.find({
"location.coordinates": {
"$near": {
"$maxDistance": 1000,
"$geometry": {
"type": "Point",
"coordinates": [
10,
10
]
}
}
}
}).sort('-score');
検索の後に.sortを追加してもここでは役に立たず、アイテムは近い順に返されます。
$near
は、ドキュメントを距離でソートしますが、ここでは無駄です。ドキュメントを並べ替えない$geoWithin
を使用することをお勧めします。何かのようなもの:
model.find({
"location.coordinates": {
$geoWithin: { $center: [ [-74, 40.74], <radius> ] } } }
).sort({score: -1});
$center
のドキュメントには、もう少し詳細があります。