我有一个案例需要搜索登录用户所在位置的附近商家。 用户当前城市的lat长期用于与我们数据库中存储的商家数据进行比较,如下所示 -
{“merchant_id”:“W234FDHDF ## 234”,“location”:{“loc”:{“lat”: - 58.4,“lng”:30.8} ,“city”: “Cupertino”,“display_address”:[“20956 W Homestead Rd”,“Cupertino,CA 95015”],“postal_code”:“95015”,“country_code”:“US”,“address”:[“20956 W Homestead Rd “],”state_code“:”CA“}}
我是MongoDB的新手,对此并不太了解。我正在为我们的Java应用程序使用mongodb API。 有人可以提供如何在Java中实现它的指导吗?
答案 0 :(得分:0)
MongoDB不关心loc
中的字段名称。它总是首先使用经度,然后是纬度。你有错误的方法。相反,你想要这个:
db.col.ensureIndex( { location.loc: "2dsphere" } );
db.col.insert( {
"merchant_id" : "W234FDHDF##234",
"location" : {
"loc" : { type: "Point", coordinates: [ 30.8, -58.4 ] },
"city" : "Cupertino",
}
} );
然后您可以使用$geoNear
查询:
// location object
BasicDBObject myLoc = new BasicDBObject();
myLoc.append("type", "Point");
double[] loc = {-121.97679901123047,37.557369232177734};
// place comma in myLoc.append("coordinates", location);
myLoc.append("coordinates" , loc );
// command object
BasicDBObject myCmd = new BasicDBObject();
myCmd.append("geoNear", "col");
myCmd.append("near", myLoc);
myCmd.append("spherical", true);
myCmd.append("maxDistance", 50000); // in meters
System.out.println(myCmd);
CommandResult myResults = db.command(myCmd);