maxmax附近的猫鼬似乎没有效果

时间:2014-04-02 20:42:15

标签: mongodb mongoose geojson

我正在尝试在Mongoose中编写一个简单的查询,它返回一些附近的结果,这些结果都具有GeoJSON属性。但是,我的Mongoose脚本中的结果与mongo中的查询结果不同。

这是一个原始的Mongo脚本:

var conn = new Mongo(),
    db = conn.getDB("my_db"),
    collection;

collection = db.my_moodels.find({
  geo: {
    $nearSphere: {
      $geometry: {
        type: "Point",
        coordinates: [-0.02028, 51.50703]
      },
      $maxDistance: 3000 // 3k I'm assuming
    }
  }
});

print(collection.length()); // I get 6 (which is round about right)

这是我的Mongoose脚本:

MyModel
  .find()
  .where('geo')
  .near({
    center: [-0.02028, 51.50703],
    maxDistance: 3000,
    spherical: yes
  })
  .exec(function (err, results) {
    if (err) {
      throw err;
    } else {
      console.log(results.length); // Here I get over 340, which I think is all of the possible results.
    }
  });

如您所见,结果计数完全不同。实际上,更改Mongoose脚本中的maxDistance属性似乎什么都不做。

谁能看到我在这里缺少的东西?

1 个答案:

答案 0 :(得分:0)

我看到你在这里缺少的东西。

根据mongodb docs maxDistance,仅当您的中心是GeoJSON对象时才以米为单位。

因此,当您使用maxDistance:3000进行查询时,您的单位为弧度,您将获得所有结果。 (由于弧度差异不能达到3000)。

这是一个使用mongoose的查询构建器的工作查询,以米为单位:

MyModel
  .find()
  .where('geo')
  .near({
    center: {type: 'Point', coordinates: [-0.02028, 51.50703]}, // <--
    maxDistance: 3000,
    spherical: yes
  })
  .exec(function (err, results) {
    if (err) {
      throw err;
    } else {
      console.log(results.length); // This should work.
    }
  });