0

我有一个案例,我需要搜索登录用户所在位置的附近商家。用户当前城市的纬度,用于与存储在我们数据库中的商家数据进行比较,如下所示 -

{“merchant_id”:“W234FDHDF##234”,“位置”:{ “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 中实现这一点的指导吗?

4

1 回答 1

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);
于 2013-08-12T09:10:45.607 回答