我有一个mongo查询,它在我的生产服务器上运行良好。但它不会在我的开发服务器上返回结果。我在开发服务器上的数据库是实时数据库的副本。
Prod - AWS:
蒙戈v3.0.7
Dev - Digital Ocean
蒙戈v3.0.9
Mongo查询(使用RoboMongo运行)-坐标屏蔽匿名;)
db.getCollection('$cmd').findOne({
"geoNear": "ProviderData",
"near": [
XX.1325611,
XX.1357446
],
"spherical": true,
"distanceMultiplier": 6378137,
"query": {
"BusinessType": "557ff3f98b424a1009776ba5",
"Status": "1"
}
})
在搜索中应该返回的文档看起来像这样(删除不相关的字段):
{
"_id" : ObjectId("566xxxxxxxxxxxxxxxxxxdb0"),
"ProviderName" : "Test Fitness Business",
"BusinessType" : "557ff3f98b424a1009776ba5",
"Location" : {
"Longitude" : XX.135745,
"Latitude" : XX.132561
},
"ImageFlag" : "1",
"Status" : "1",
"OrderEmail" : "tests@test3.com",
"Radius" : "12",
"ParentCompanyName" : "Test Fitness Business",
}
我的Live服务器返回上述文档和另外两个文档。在Dev服务器上,我只得到
{
"ok" : 0,
"errmsg" : "no geo indices for geoNear"
}
我做错了什么?
编辑:其他简单的CRUD查询在两个服务器上都可以正常工作。
如果要执行$geoNear
,则必须使用地理索引:2D或2DSphere。因此,只需将位置字段索引从生产服务器复制到开发服务器。
Geonear是一个聚合管道阶段。你应该这样做。
db.getCollection('trips').aggregate([{
"$geoNear": {
"near": {"type":"Point","coordinates":[
-120.28923776,
38.86485915
]},
"distanceMultiplier": 6378137,
"distanceField": "dist.calculated",
"key":"start",
"maxDistance": 200,
"spherical": true,
}}])