好久没写笔记了。。。。。。
话不多说直接上代码,
/**
* @Title: testjingweidu
* @Description: 先添加两条测试数据
* @param 设定文件
* @return void 返回类型
* @throws
*/
@Test
public void testjingweidu() {
Mongo mongo;
try {
mongo = new Mongo("**************", 27017);
// 连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立
DB db = mongo.getDB("yourdb");
// Get collection from MongoDB, database named "yourDB"
//
// 从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立
DBCollection collection = db.getCollection("testss");
BasicDBList coordinates = new BasicDBList();
coordinates.put(0, -73.97);
coordinates.put(1, 40.77);
collection.insert(new BasicDBObject("name", "Central Park")
.append("coordinates", coordinates)
.append("category", "Parks"));
coordinates.put(0, -73.88);
coordinates.put(1, 40.78);
collection.insert(new BasicDBObject("name", "La Guardia Airport")
.append("coordinates", coordinates)
.append("category", "Airport"));
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
-----------------------------------------------我是分割线--------------------------------------------------------------
前提条件:
建立空间索引的key可以使用array或内嵌文档存储,但是前两个elements必须存储固定的一对空间位置数值。如
{ loc : [ 50 , 30 ] }
{ loc : { x : 50 , y : 30 } }
{ loc : { foo : 50 , y : 30 } }
{ loc : { lat : 40.739037, long: 73.992964 } }
/**
* @Title: testsuoyin
* @Description: 添加2d索引 ,注意2d索引需要特定条件
* @param 设定文件
* @return void 返回类型
* @throws
*/
@Test
public void testsuoyin() {
Mongo mongo;
try {
mongo = new Mongo("**************", 27017);
// 连接名为yourdb的数据库,假如数据库不存在的话,mongodb会自动建立
DB db = mongo.getDB("yourdb");
// Get collection from MongoDB, database named "yourDB"
//
// 从Mongodb中获得名为yourColleection的数据集合,如果该数据集合不存在,Mongodb会为其新建立
DBCollection collection = db.getCollection("hotel");
BasicDBObject dObject1 = new BasicDBObject();
dObject1.put("coordinates", "2d");//
2d -----2dsphere 区别在下边
collection.ensureIndex(dObject1);
} catch (UnknownHostException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2d 和
2dsphere 区别,我个人测试觉得他的区别 2d填写的是 搜索的时候入参是经纬度 ,2dsphere 可以直接填距离 也就是多少m
---------------------------以上是java 添加索引,本人比较懒,不想直接dos操作----------------------------
-------------------------下边就是查询---------------
/**
* @Title: findLat
* @Description: TODO(这里用一句话描述这个方法的作用)
* @param 设定文件
* @return void 返回类型
* @throws
*/
@Test
public void findLat() {
Mongo mongo;
try {
mongo = new Mongo("**********", 27017);
DB db = mongo.getDB("yourdb");
DBCollection collection = db.getCollection("hotel");
BasicDBList myLocation = new BasicDBList();
myLocation.put(0,-73.88);
myLocation.put(1, 40.78);
DBCursor myDoc = collection.find(
new BasicDBObject("coordinates",
new BasicDBObject("$near", myLocation)
.append("$maxDistance", 0.05)
//这里是2d索引,所以这里应该是经纬度 具体的我也说不大清楚,如果是
2dsphere
的索引,可以直接添加 距离,这里是方圆 多少m
//这里可以继续添加别的查询条件等,直接append就可以 。具体的我在后边再写个demo
)
)
.limit(5); //这里是需要查询出来的条数。要多少写多少啊,这个值是最大值,不够的话就。。
while(myDoc.hasNext()){
System.out.println("-----: "+myDoc.next());
}
System.out.println(myDoc);
} catch (UnknownHostException e) {
e.printStackTrace();
}
}
----------------------------------------以上代码是mongo原生写法。所有东西都用java操作的--------------------------------
再写一个使用
mogoTemplate 工具模板的。区别主要在与查询条件入参的方式 。。。。。。。。