web-dev-qa-db-ja.com

Mongoose Geo Near Search-指定された距離内で並べ替える方法は?

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を追加してもここでは役に立たず、アイテムは近い順に返されます。

4
Daniel Valland

$nearは、ドキュメントを距離でソートしますが、ここでは無駄です。ドキュメントを並べ替えない$geoWithinを使用することをお勧めします。何かのようなもの:

model.find({
  "location.coordinates": { 
     $geoWithin: { $center: [ [-74, 40.74], <radius> ] } } }
).sort({score: -1});

$center のドキュメントには、もう少し詳細があります。

1
Nic Cottrell