Mongodb фильтр с расстоянием не работает - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь отфильтровать широту и длину с максимальным расстоянием 10 км.Вот моя реализация кода mongodb для nodejs:

  dbo.collection('CT').createIndex( { "loc" : "2dsphere" } );

     var findquery = {
       "GeoJSON.loc": {
         $near: {
           $geometry: {
              type: "Point" ,
              coordinates: [ 103.819839, 1.352083], //Long Lat
              $maxDistance:10000 
           }
         }
       }
    };


  dbo.collection("CT").find(findquery).toArray(function(err, result) {
    console.log(result);
    db.close();
  });

Данные хранятся так: mongodb:

[   {
    "_id": "5bc04226df7ea7503c7d57f1",
    "results": [
      {
        "ID": "FD02328677"
      }
    ],
    "GeoJSON": [
      {
        "city": "Los Angeles",
        "loc": {
          "type": "Point",
          "coordinates": [
            -118.24532,
            34.05349
          ]
        }
      },
      {
        "city": "Tampa",
        "loc": {
          "type": "Point",
          "coordinates": [
            -82.45927,
            27.94653
          ]
        }
      },
      {
        "city": "Seattle",
        "loc": {
          "type": "Point",
          "coordinates": [
            -122.32945,
            47.60358
          ]
        }
      }          
    ]   } ]

Когда я запускаю код, я могу получить результат (по праву я не долженt), похоже, функция фильтра не работает в моем коде.Любое предложение?

1 Ответ

0 голосов
/ 12 октября 2018

Всего несколько опечаток:

Индекс

 dbo.collection('CT').createIndex( { "loc" : "2dsphere" } );

должен быть

 dbo.collection('CT').createIndex( { "GeoJSON.loc" : "2dsphere" } );

В противном случае вы получите ошибку при выполнении запроса.

Запрос

 var findquery = {
   "GeoJSON.loc": {
     $near: {
       $geometry: {
          type: "Point" ,
          coordinates: [ 103.819839, 1.352083], //Long Lat
          $maxDistance:10000 
       }
     }
   }
};

должен быть

 var findquery = {
   "GeoJSON.loc": {
     $near: {
       $geometry: {
          type: "Point" ,
          coordinates: [ 103.819839, 1.352083], //Long Lat
       },
       $maxDistance:10000 
     }
   }
};

В вашем запросе $maxDistance в $geometry игнорируется.В $near нет $maxDistance, поэтому возвращаются все записи.

...