我正在尝试在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
属性似乎什么都不做。
谁能看到我在这里缺少的东西?
答案 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.
}
});