在我的项目中有两个要求
第一个:我有以下收藏
{
"name": "James",
"loc" : [ 12.9000, 14.6733]
},
{
"name": "James",
"loc" : [ 54.9000, 78.6733]
}
为此我必须找到与我的位置匹配的特定半径的所有位置 所以我使用这个查询:
var myLoc = [ 13.5, 67.5 ];
var myRadius = 150;
model.find({
loc : {
$geoWithin : {
$centerSphere : [ myLoc, myRadius ]
}
}
}
).exec()
以上查询工作正常。
第二个:我收藏如下。我面临着问题。
{
"name" : "James",
"loc" : [ 12.9000, 14.6733],
"radius" : 115
},
{
"name" : "James",
"loc" : [ 54.9000, 78.6733],
"Radius" : 276
}
这里我的收藏本身就是半径。 用户输入仅为loc
var myLoc = [ 14.67, 56.78 ];
现在我必须找到与我的位置匹配的所有文件及其位置和半径。
我尝试过像
这样的查询model
.where('loc').within({ center: myLoc, radius: 'this.Radius', unique: true, spherical: true })
.exec()
Error : The err is CastError: Cast to number failed for value "this.Radius" at path "undefined"
然后
model
.find(
{
$where:
{
Location : {
$geoWithin :
{ $centerSphere : [myLoc, '$Radius'] }
}
}
}
)
.exec()
Error : Error: Must have a string or function for $where
然后
model
.aggregate(
{
$match : {
loc : {
$geoWithin : {
$centerSphere : [ myLoc, "$Radius" ]
}
}
}
}
)
.exec( )
错误:错误是MongoError:异常:错误查询:BadValue错误的地理查询:{$ geoWithin:{$ centerSphere:[[ - -1.965373600000021,52.4744464]," $ Radius" ]}}
我对mongodb查询很新。即使你的小建议也能帮助我。 请告诉我如何实现这一目标。 非常感谢您的帮助。谢谢
答案 0 :(得分:1)
您可以使用$where
运算符:
model.find({'$where': function() {
var myLoc = [ 14.67, 56.78 ];
return { 'loc': {
'$geoWithin': { "$centerSphere": [ myLoc, this.Radius ] } }
}}
})
答案 1 :(得分:0)
样本采集数据
{
"business": "Store",
"geo": {
"name": "StoreName",
"coordinates": [80.628913, 13.622177],
"type": "Point"
},
"address": "Some Address",
"city": "Kolkata",
"pincode": "700001",
"startTime": "10:00:00 AM",
"closingTime": "7:00:00 PM",
"closedOn": "Closed on Sunday",}
创建 2dSphear index on db.collectionName.createIndex({geo:'2dsphere'})
现在使用 $geoNear 聚合查询平滑获取记录。
db.collectionName.aggregate([
{
$geoNear: {
near: { type: "Point", coordinates: [ 80.3355,13.6701 ] }, // Mandatory Param.
distanceField: "dist.calculated", // It will return in the document how much distence (meter) is far feom center
maxDistance: 2000, // Fetch 2KM radius store, Distance in meter from the center
spherical: true, // calculates distances using spherical geometry.
query:{pincode:"700001"} // Specific Query parameter on other field present in the collection
}
}
]).pretty()
这是一个工作代码并经过测试和验证。