无法使用 Mongoose/MongoDB 中的坐标 $near 语句找到附近位置的结果
Not able to find nearby location's results using coordinate $near statement in Mongoose/MongoDB
我正在尝试从特定点获取附近位置的结果。通过使用按 ID 查找的常规方法,会返回一个结果,但是当我尝试使用坐标查找附近的位置时,没有出现任何结果。我的代码中没有 errors/warnings 但也没有任何结果。我错过了什么?
模型架构
var locationSchema = new Schema({
fb_location: String,
coordinates:[]
});
var feed_postSchema = new Schema({
content: String,
location: [locationSchema],
image: [{ type : String }],
created_at: { type : Date, default: Date.now }
});
locationSchema.index({coordinates:'2dsphere'});
Server.js
app.get('/test_radar',function(request,response){
Feed_Post.find(
{
'location.coordinates' :
{
$near :
{
coordinates: [100,5]
},
$maxDistance: 100
}
},function(err,ret){
console.log(response.json(ret));
})
});
示例数据库数据
"_id" : ObjectId("5620a3c2fde01a55065f4c3b"),
"content" : "Test post",
"created_at" : ISODate("2015-10-16T07:14:10.636Z"),
"image" : [ ],
"location" : [
{
"fb_location" : "Malaysia",
"_id" : ObjectId("5620a3c2fde01a55065f4c3c"),
"coordinates" : [
100,
5
]
}
],
"__v" : 0
注意:我确实设置了$maxDistance为100 * 1000,还是没有结果。
$near
运算符需要地理空间索引。
如果您想使用旧坐标将您的位置定义为一个点,您必须 2D index created。然后您将能够在您指定的语法中使用 $near
运算符。
您创建了 2dsphere 索引,因此您必须在查询中指定 GeoJSON 点:
Feed_Post.find(
{
'location.coordinates' :
{
$geometry: {
type: "Point" ,
coordinates: [ 100 , 5 ]
},
$maxDistance: 100
}
},function(err,ret){
console.log(response.json(ret));
})
检查 $near 定义。
我正在尝试从特定点获取附近位置的结果。通过使用按 ID 查找的常规方法,会返回一个结果,但是当我尝试使用坐标查找附近的位置时,没有出现任何结果。我的代码中没有 errors/warnings 但也没有任何结果。我错过了什么?
模型架构
var locationSchema = new Schema({
fb_location: String,
coordinates:[]
});
var feed_postSchema = new Schema({
content: String,
location: [locationSchema],
image: [{ type : String }],
created_at: { type : Date, default: Date.now }
});
locationSchema.index({coordinates:'2dsphere'});
Server.js
app.get('/test_radar',function(request,response){
Feed_Post.find(
{
'location.coordinates' :
{
$near :
{
coordinates: [100,5]
},
$maxDistance: 100
}
},function(err,ret){
console.log(response.json(ret));
})
});
示例数据库数据
"_id" : ObjectId("5620a3c2fde01a55065f4c3b"),
"content" : "Test post",
"created_at" : ISODate("2015-10-16T07:14:10.636Z"),
"image" : [ ],
"location" : [
{
"fb_location" : "Malaysia",
"_id" : ObjectId("5620a3c2fde01a55065f4c3c"),
"coordinates" : [
100,
5
]
}
],
"__v" : 0
注意:我确实设置了$maxDistance为100 * 1000,还是没有结果。
$near
运算符需要地理空间索引。
如果您想使用旧坐标将您的位置定义为一个点,您必须 2D index created。然后您将能够在您指定的语法中使用 $near
运算符。
您创建了 2dsphere 索引,因此您必须在查询中指定 GeoJSON 点:
Feed_Post.find(
{
'location.coordinates' :
{
$geometry: {
type: "Point" ,
coordinates: [ 100 , 5 ]
},
$maxDistance: 100
}
},function(err,ret){
console.log(response.json(ret));
})
检查 $near 定义。