Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MongoDB:使用$geointen运算符无法获得正确的结果_Mongodb_Geolocation_Geospatial_Spring Data Mongodb - Fatal编程技术网

MongoDB:使用$geointen运算符无法获得正确的结果

MongoDB:使用$geointen运算符无法获得正确的结果,mongodb,geolocation,geospatial,spring-data-mongodb,Mongodb,Geolocation,Geospatial,Spring Data Mongodb,我正在使用$geointen进行循环,但没有得到预期的结果。有两个集合,一个用于用户,另一个用于项目。我正在为项目设置半径和坐标。所以我必须在这个坐标和半径内找到一个用户 用户集合 { "_id" : NumberLong(25287), "_class" : "com.samepinch.domain.user.User", "name":"XYZ", "location" : [ 74.866247, 31.63336

我正在使用
$geointen
进行循环,但没有得到预期的结果。有两个集合,一个用于
用户
,另一个用于
项目
。我正在为项目设置半径和坐标。所以我必须在这个坐标和半径内找到一个用户

用户集合

{
    "_id" : NumberLong(25287),
    "_class" : "com.samepinch.domain.user.User",
    "name":"XYZ",
    "location" : [
        74.866247,
        31.63336
    ]
}
{
    "_id" : NumberLong(46603),
    "itemName" : "Chandigarh",
    "categoryName" : "TRAVELLING",
    "location" : {
        "_id" : null,
        "longitude" : 77.15319738236303,
        "latitude" : 28.434568229025803,
        "radius" : 29153.88048637637
    }
}
项目集合

{
    "_id" : NumberLong(25287),
    "_class" : "com.samepinch.domain.user.User",
    "name":"XYZ",
    "location" : [
        74.866247,
        31.63336
    ]
}
{
    "_id" : NumberLong(46603),
    "itemName" : "Chandigarh",
    "categoryName" : "TRAVELLING",
    "location" : {
        "_id" : null,
        "longitude" : 77.15319738236303,
        "latitude" : 28.434568229025803,
        "radius" : 29153.88048637637
    }
}
根据项目坐标和用户坐标,两个地方之间的距离约为500 km

质疑

根据$geoinsin,用户不应该显示,但它正在显示。如果我做错了什么,请帮助我


谢谢

我想你的问题是,你搜索的半径太大了。 根据,
$centerSphere
的正确语法为:

db.<name>.find( {
    loc: { $geoWithin: 
     { 
        $centerSphere: [ [ <longitude>, <latitude> ],
        <radius in MILES>/3963.2 ] } 
     }
} )
db..find({
loc:{$GEOFIN:
{ 
$centerSphere:[[,],
/3963.2 ] } 
}
} )
您现在正在搜索点周围29153.880486376337英里半径内的点,并且两个点都位于您定义的中心周围的半径内


我希望这对您有所帮助:)

如果您希望以后在项目中查询与
$geointen
$centerSphere
相关的字段结构,请仅按以下方式指定字段结构:-

“位置”:{
“液化天然气”:77.15319738236303,
“lat”:28.434568229025803
},

“redius”:120
只是因为我已经遇到过几次了,我想详细说明一下Ashutosh的答案

半径必须以弧度为单位,并且转换基于球体的半径(以您希望使用的单位为单位)。假设您使用地球作为球体,并且希望
$geoinsin
以米为单位,那么您可以将
半径
字段设置为
米/(6371*1000)
,或者将您想要的距离除以地球半径,以距离表示的单位

此列表应有助于:

  • 米:距离,单位为
    米/6371000
    (地球平均半径,单位为米)
  • 公里数:
    km/6371为单位的距离
  • 英里数:英里数中的距离/3959
  • 英尺:距离,单位为
    英尺/20903520

如果我想在太宽的半径范围内搜索,我该怎么办?您正在搜索点周围约29.153英里=约46.917公里的半径范围内。由于地球的半径只有6.371km,从逻辑上讲,地球上的每个点都将满足您的
$geoin
条件。你应该考虑让你的半径变小。