此文基于Spring的MongoTemplate,介绍MongoDB比较基础常用的增删改查操作。涵盖了从集合创建、索引创建和CRUD操作到更高级的功能(如Map-Reduce和聚合)等等。不多说,直接上代码。
模拟基础数据
Person dave, oliver, carter;
@Autowired
private MongoOperations mongoOps;
Collation en;
@Before
public void setUp() {
// 排序规则需要一个用于创建的区域设置。中文排序使用:zh
en = Collation.of("en")
// 排序规则强度定义表示字符之间差异的比较级别。
// 根据所选的强度,可以配置各种选项(区分大小写、大小写排序等)。
.strength(Collation.ComparisonLevel.secondary().includeCase())
// 指定是将数字字符串比较为数字还是字符串。
.numericOrderingEnabled()
// 为了便于比较,指定排序规则是否应将空格和标点符号视为基本字符。
.alternate(Collation.Alternate.shifted().punct())
// 指定带有变音符号的字符串是否从字符串的后面排序,例如使用英语字典排序。
.forwardDiacriticSort()
// 指定是否检查文本是否需要规范化以及是否执行规范化。
.normalizationEnabled();
// 排序可用于创建集合和索引。如果您创建了一个指定排序规则的集合,则排序规则将应用于索引创建和查询
mongoOps.createCollection(Person.class, CollectionOptions.just(en));
mongoOps.indexOps(Person.class).ensureIndex(new Index("firstname", Sort.Direction.ASC).collation(en));
dave = mongoOps.insert(new Person("Dave", "Matthews"));
oliver = mongoOps.insert(new Person("Oliver August", "Matthews"));
carter = mongoOps.insert(new Person("Carter", "Beauford"));
}
@After
public void destory(){
mongoOps.dropCollection(Person.class);
}
新增操作
/**
* 存在同ID更新;不存在ID新增。
*/
@Test(expected = DuplicateKeyException.class)
public void testSave(){
Person person = new Person("Dave", "Dreamson");
person.setId(dave.getId());
// 使用save,如果是相同ID,则更新相应的记录
final Person dave = mongoOps.save(person);
Assert.assertEquals("Dreamson",dave.getLastname());
// 使用insert,如果是相同ID,抛出DuplicateKeyException
mongoOps.insert(person);
}
/**
* 批量新增
*/
@Test
public void testInsertAll(){
mongoOps.insertAll(Lists.newArrayList(
new Person("Dave", "Matthews"),
new Person("Oliver August", "Matthews"),
new Person("Carter", "Beauford")
));
final List<Person> all = mongoOps.findAll(Person.class);
Assert.assertEquals(6,all.size());
}
更新操作
/**
* 更新第一条记录
*/
@Test
public void testUpdateFirst(){
final UpdateResult updateResult = mongoOps.updateFirst(Query.query(Criteria.where("firstname").is("Carter")),
Update.update("lastname", "Dreamson"), Person.class);
System.out.println(updateResult);
Person carter = mongoOps.findOne(Query.query(Criteria.where("firstname").is("Carter")), Person.class);
Assert.assertEquals("Dreamson",carter.getLastname());
}
/**
* 批量更新
*/
@Test
public void testBatchUpdate(){
mongoOps.updateMulti(new Query(Criteria.where("age").exists(false)),
new Update().inc("age", 50), Person.class);
mongoOps.findAll(Person.class).forEach(person->
Assert.assertEquals(50,person.getAge().longValue())
);
}
/**
* 存在更新,不存在新增
*/
@Test
public void testUpsert(){
final UpdateResult updateResult = mongoOps.upsert(Query.query(Criteria.where("firstname").is("xiaoming").and("lastname").is("Joe"))
, Update.update("age", 3), Person.class);
System.out.println(updateResult);
final Person xiaoming = mongoOps.findOne(Query.query(Criteria.where("firstname").is("xiaoming")), Person.class);
Assert.assertEquals(xiaoming.getLastname(),"Joe");
Assert.assertEquals(xiaoming.getAge().longValue(),3);
}
/**
* 找到记录并更新,没找到返回NULL
*/
@Test
public void testFindAndModify(){
Query query = new Query(Criteria.where("firstname").is("Dave"));
Update update = new Update().inc("age", 1);
Person p = mongoOps.findAndModify(query, update, Person.class); // 返回旧对象
if(Optional.ofNullable(p).isPresent()){
Assert.assertEquals(p.getFirstname(), "Dave");
Assert.assertEquals(p.getAge(), null);
p = mongoOps.findOne(query, Person.class);
Assert.assertEquals(p.getAge().longValue(), 1);
p = mongoOps.findAndModify(query, update, new FindAndModifyOptions().returnNew(true), Person.class); // 返回新对象
Assert.assertEquals(p.getAge().longValue(), 2);
}else{
System.out.println("没找到相应的记录!");
}
}
/**
* 查找并替换,返回旧记录
*/
@Test
public void testFindAndReplace(){
Optional<Person> result = mongoOps.update(Person.class)
.matching(Query.query(Criteria.where("firstname").is("Dave")))
.replaceWith(new Person("Dick","what's up!"))
.withOptions(FindAndReplaceOptions.options().upsert())
.as(Person.class)
.findAndReplace();
Assert.assertEquals("Dave", result.get().getFirstname());
final Person dick = mongoOps.findById(result.get().getId(), Person.class);
Assert.assertEquals("Dick", dick.getFirstname());
}
删除操作
/**
* 删除对象
*/
@Test
public void testRemove(){
// 批量删除
final DeleteResult deleteResult = mongoOps.remove(
Query.query(Criteria.where("firstname").is("Oliver August")), Person.class);
System.out.println(deleteResult);
Assert.assertEquals(2,mongoOps.findAll(Person.class).size());
mongoOps.remove(dave);
Assert.assertEquals(1,mongoOps.findAll(Person.class).size());
// 批量逐个删除
mongoOps.findAllAndRemove(
Query.query(Criteria.where("firstname").is("Carter")), Person.class);
Assert.assertEquals(0,mongoOps.findAll(Person.class).size());
}
乐观锁处理
/**
* 乐观锁,version版本自增。
* 如果更新时version<=原记录version,则抛出异常
*/
@Test(expected = OptimisticLockingFailureException.class)
public void testOptimisticLocking(){
Person daenerys = mongoOps.insert(new Person("Daenerys","ABC"));
Person tmp = mongoOps.findOne(Query.query(Criteria.where("id").is(daenerys.getId())), Person.class);
daenerys.setAge(100);
mongoOps.save(daenerys);
mongoOps.save(tmp);
}
查询操作
/**
* 通过id查询记录
*/
@Test
public void testFindById(){
Person dave = mongoOps.findOne(Query.query(Criteria.where("firstname").is("Dave")), Person.class);
dave = mongoOps.findById(dave.getId(), Person.class);
Assert.assertEquals(this.dave,dave);
}
/**
* 查询所有
*/
@Test
public void testFindAll(){
final List<Person> all = mongoOps.findAll(Person.class);
Assert.assertEquals(all.size(),3);
Assert.assertTrue(all.containsAll(Lists.newArrayList(dave,oliver,carter)));
}
/**
* 查询一条记录
*/
@Test
public void testFindOne(){
Person dave = mongoOps.findOne(Query.query(Criteria.where("firstname").is("Dave")), Person.class);
Assert.assertEquals("Matthews",dave.getLastname());
}
/**
* 通过JSON的方式查询
*/
@Test
public void testBasicQuery(){
BasicQuery query = new BasicQuery("{ firstname : { $in : ['Dave','Carter'] }, lastname : { $eq : 'Beauford' }}");
List<Person> result = mongoOps.find(query, Person.class);
Assert.assertEquals(1,result.size());
Assert.assertEquals("Carter",result.get(0).getFirstname());
}
/**
* 为单个字段获取不同的值
*/
@Test
public void testDistinct(){
List<String> lastname = mongoOps.query(Person.class)
.distinct("lastname")
.as(String.class)
.all();
lastname.forEach(System.out::println);
Assert.assertTrue(lastname.containsAll(Lists.newArrayList("Matthews","Beauford")));
}
/**
* 集合排序操作
*/
@Test
public void testCollations(){
// 使用collation的find查询
Query query = new Query(Criteria.where("lastname").is("Matthews")).collation(en);
List<Person> results = mongoOps.find(query, Person.class);
System.out.println(results);
Assert.assertEquals(results.get(0).getFirstname(),"Dave");
// 使用collation的aggregation查询
// newAggregation().withOptions(AggregationOptions.builder().collation(collation).build());
}
GEO查询操作
1、新建初始化脚本starbucks-in-nyc.json
[
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"16628",
"name":"26th & Broadway",
"street":"1140 Broadway",
"city":"New York",
"location" : { "latitude":40.743827, "longitude":-73.989015 }
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7427",
"name":"29th & Park-Park Ave. South",
"street":"424 Park Avenue South",
"city":"New York",
"location" : { "latitude":4.074426, "longitude":-73.983749}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7263",
"name":"43rd & 8th",
"street":"684 Eighth Avenue",
"city":"New York",
"location" : { "latitude":40.758001, "longitude":-73.988994}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7215",
"name":"1585 Broadway (47th)",
"street":"1585 Broadway",
"city":"New York",
"location" : { "latitude":40.759686, "longitude":-73.985235}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7393",
"name":"49th & 8th-World Wide Plaza",
"street":"325 W 49th St",
"city":"New York",
"location" : { "latitude":40.762176, "longitude":-73.987472}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7316",
"name":"31st & 7th",
"street":"370 7th Avenue",
"city":"New York",
"location" : { "latitude":40.74899, "longitude":-73.992372}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7540",
"name":"17th and Broadway (41 Union Square",
"street":"41 Union Square West",
"city":"New York",
"location" : { "latitude":40.737035, "longitude":-73.990558}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7611",
"name":"40th & Lexington (360 Lex)",
"street":"360 Lexington Avenue",
"city":"New York",
"location" : { "latitude":40.750332, "longitude":-73.977043}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"15461",
"name":"Jackson Square at Greenwich Ave",
"street":"122 Greenwich Avenue, (space A)",
"city":"New York",
"location" : { "latitude":40.738441, "longitude":-74.002217}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"852",
"name":"1656 Broadway",
"street":"1656 Broadway",
"city":"New York",
"location" : { "latitude":40.762092, "longitude":-73.983345}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"11738",
"name":"63rd & Broadway",
"street":"1889 Broadway",
"city":"New York",
"location" : { "latitude":40.771365, "longitude":-73.982591}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"817",
"name":"1st Avenue & 75th St.",
"street":"1445 First Avenue",
"city":"New York",
"location" : { "latitude":40.770031, "longitude":-73.954631}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"839",
"name":"Broadway @ 81st",
"street":"2252 Broadway",
"city":"New York",
"location" : { "latitude":40.784905, "longitude":-73.978696}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7378",
"name":"Union Square",
"street":"10 UNION SQUARE EAST",
"city":"New York",
"location" : { "latitude":40.735022, "longitude":-73.989848}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7547",
"name":"Sheridan Square (72 Grove Street)",
"street":"72 Grove Street",
"city":"New York",
"location" : { "latitude":40.73311, "longitude":-74.002707}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7216",
"name":"87th & Lexington",
"street":"120 EAST 87TH ST",
"city":"New York",
"location" : { "latitude":40.780139, "longitude":-73.955346}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7352",
"name":"86th & Columbus",
"street":"540 Columbus Avenue",
"city":"New York",
"location" : { "latitude":40.786704, "longitude":-73.972244}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7346",
"name":"SONY",
"street":"550 Madison Avenue, #A32",
"city":"New York",
"location" : { "latitude":40.761478, "longitude":-73.973501}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7317",
"name":"73rd & Columbus",
"street":"267-275 Columbus Ave",
"city":"New York",
"location" : { "latitude":40.777949, "longitude":-73.978175}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"14091",
"name":"Macy's 5th Floor - Herald Square",
"street":"151 W. 34th Street",
"city":"New York",
"location" : { "latitude":40.751148, "longitude":-73.990061}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7525",
"name":"135 E 57 Street (New World)",
"street":"135 East 57th Street",
"city":"New York",
"location" : { "latitude":40.760965, "longitude":-73.96921}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7608",
"name":"48th & Lexington",
"street":"511 Lexington Avenue",
"city":"New York",
"location" : { "latitude":40.755021, "longitude":-73.973223}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"75589",
"name":"Marriott Marquis-Lobby",
"street":"1535 Broadway",
"city":"New York",
"location" : { "latitude":40.757993, "longitude":-73.985633}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7373",
"name":"Grand Central Station",
"street":"107 E 43rd St, Space MC-72",
"city":"New York",
"location" : { "latitude":40.753291, "longitude":-73.977635}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"75847",
"name":"Hilton New York Marketplace",
"street":"1335 Avenue of the Americas",
"city":"New York",
"location" : { "latitude":40.762304, "longitude":-73.979184}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7342",
"name":"41st & 3rd",
"street":"639 3rd Avenue",
"city":"New York",
"location" : { "latitude":40.750195, "longitude":-73.974565}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9241",
"name":"Park Avenue Plaza",
"street":"55 E 53rd St",
"city":"New York",
"location" : { "latitude":40.759285, "longitude":-73.973516}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7860",
"name":"Trump Tower",
"street":"725 5th Avenue",
"city":"New York",
"location" : { "latitude":40.762555, "longitude":-73.974236}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"16576",
"name":"36th St & Sixth Avenue",
"street":"977 Avenue of the Americas",
"city":"New York",
"location" : { "latitude":40.751005, "longitude":-73.986913}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"14441",
"name":"118th & Frederick Douglas Blvd.",
"street":"2195 Frederick Douglas Boulevard",
"city":"New York",
"location" : { "latitude":40.805915, "longitude":-73.954495}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"5114",
"name":"96th & Lexington Ave",
"street":"1491 Lexington Avenue",
"city":"New York",
"location" : { "latitude":40.785886, "longitude":-73.950919}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"15685",
"name":"69th & First",
"street":"1281 First Avenue",
"city":"New York",
"location" : { "latitude":40.765864, "longitude":-73.957431}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"10751",
"name":"Roosevelt Island",
"street":"455 Main Street",
"city":"New York",
"location" : { "latitude":40.759326, "longitude":-73.95289}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"10608",
"name":"Third & 60th",
"street":"1021 Third Avenue",
"city":"New York",
"location" : { "latitude":40.762394, "longitude":-73.965745}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"10693",
"name":"Bloomberg Building",
"street":"731 Lexington Avenue",
"city":"New York",
"location" : { "latitude":40.761401, "longitude":-73.967862}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7404",
"name":"57th & Lexington",
"street":"116 E. 57th Street",
"city":"New York",
"location" : { "latitude":40.761088, "longitude":-73.969984}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"10841",
"name":"55th & Lexington",
"street":"655 Lexington Avenue",
"city":"New York",
"location" : { "latitude":40.759446, "longitude":-73.969979}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7655",
"name":"53rd & Lexington",
"street":"630 Lexington Ave",
"city":"New York",
"location" : { "latitude":40.758743, "longitude":-73.97094}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7761",
"name":"52nd & Lexington",
"street":"599 Lexington",
"city":"New York",
"location" : { "latitude":40.757616, "longitude":-73.970857}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7802",
"name":"50th & Lexington",
"street":"560 Lexington Avenue",
"city":"New York",
"location" : { "latitude":40.756861, "longitude":-73.972635}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7370",
"name":"48th & 3rd",
"street":"757 Third Avenue",
"city":"New York",
"location" : { "latitude":40.754122, "longitude":-73.971714}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7670",
"name":"Worldwide Plaza II",
"street":"825 Eighth Avenue, W-9",
"city":"New York",
"location" : { "latitude":40.762228, "longitude":-73.986567}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9242",
"name":"450 Lexington Ave.",
"street":"450 Lexington Avenue",
"city":"New York",
"location" : { "latitude":40.753176, "longitude":-73.974975}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7426",
"name":"575 Fifth Avenue",
"street":"575 Fifth Avenue",
"city":"New York",
"location" : { "latitude":40.756131, "longitude":-73.978922}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"14241",
"name":"NHL store @ 47th & 6th",
"street":"1185 Avenue of the Americas",
"city":"New York",
"location" : { "latitude":40.758048, "longitude":-73.982192}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7462",
"name":"545 Fifth Ave.",
"street":"545 Fifth Ave.",
"city":"New York",
"location" : { "latitude":40.755168, "longitude":-73.979409}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7297",
"name":"45th St. & Sixth Ave.",
"street":"1166 Avenue of the Americas",
"city":"New York",
"location" : { "latitude":40.756649, "longitude":-73.982141}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"11737",
"name":"Madison & 44th",
"street":"340 Madison Avenue",
"city":"New York",
"location" : { "latitude":40.753944, "longitude":-73.978759}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9244",
"name":"335 Madison Ave.",
"street":"335 Madison Avenue",
"city":"New York",
"location" : { "latitude":40.753887, "longitude":-73.978719}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7506",
"name":"150 E. 42nd Street",
"street":"150 E. 42nd Street",
"city":"New York",
"location" : { "latitude":40.751238, "longitude":-73.975608}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7222",
"name":"330 Madison",
"street":"330 Madison Ave",
"city":"New York",
"location" : { "latitude":40.753335, "longitude":-73.979405}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7898",
"name":"42nd & Park",
"street":"125 Park Ave",
"city":"New York",
"location" : { "latitude":40.751779, "longitude":-73.977735}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8993",
"name":"45th & Broadway",
"street":"1530 Broadway",
"city":"New York",
"location" : { "latitude":40.757662, "longitude":-73.985721}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"15440",
"name":"43rd & Sixth",
"street":"1101 - 1109 Avenue of the Americas",
"city":"New York",
"location" : { "latitude":40.755352, "longitude":-73.983972}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7801",
"name":"41st & Madison",
"street":"295 Madison Avenue",
"city":"New York",
"location" : { "latitude":40.751957, "longitude":-73.979722}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"11764",
"name":"Empire State Building",
"street":"350 Fifth Avenue",
"city":"New York",
"location" : { "latitude":40.74866, "longitude":-73.985614}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8769",
"name":"West 43rd and Broadway",
"street":"1500 Broadway",
"city":"New York",
"location" : { "latitude":40.756643, "longitude":-73.985904}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7273",
"name":"42nd & 6th",
"street":"1100 Avenue of the Americas",
"city":"New York",
"location" : { "latitude":40.754883, "longitude":-73.984074}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8812",
"name":"39th & Park",
"street":"90 Park Ave",
"city":"New York",
"location" : { "latitude":40.750628, "longitude":-73.979265}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7890",
"name":"42nd & Eighth",
"street":"251 West 42nd Street",
"city":"New York",
"location" : { "latitude":40.757171, "longitude":-73.98905}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7463",
"name":"41st and Broadway",
"street":"1460 Broadway",
"city":"New York",
"location" : { "latitude":40.755043, "longitude":-73.986415}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7511",
"name":"525 Seventh Avenue (New World)",
"street":"525 7th Avenue",
"city":"New York",
"location" : { "latitude":40.753647, "longitude":-73.988434}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7468",
"name":"39th and 8th",
"street":"600 Eighth Ave.",
"city":"New York",
"location" : { "latitude":40.755325, "longitude":-73.990906}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7536",
"name":"36th and Madison",
"street":"200 Madison Avenue",
"city":"New York",
"location" : { "latitude":40.748918, "longitude":-73.982682}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7238",
"name":"1372 Broadway",
"street":"1372 Broadway",
"city":"New York",
"location" : { "latitude":40.751985, "longitude":-73.986909}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"10784",
"name":"35th & 5th",
"street":"373 5th Avenue",
"city":"New York",
"location" : { "latitude":40.749101, "longitude":-73.983799}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8130",
"name":"East 34th and Park",
"street":"3 Park Avenue",
"city":"New York",
"location" : { "latitude":40.747051, "longitude":-73.981236}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7403",
"name":"35th & 7th",
"street":"462 7th Avenue",
"city":"New York",
"location" : { "latitude":40.751842, "longitude":-73.990214}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"14092",
"name":"Macy's 6th Floor - Herald Square",
"street":"151 W. 34th Street",
"city":"New York",
"location" : { "latitude":40.751103, "longitude":-73.989518}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7446",
"name":"450 7th Avenue",
"street":"450 7th Avenue",
"city":"New York",
"location" : { "latitude":40.751357, "longitude":-73.990435}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7769",
"name":"Herald Square- Macy's",
"street":"151 W. 34th Street, Room 900",
"city":"New York",
"location" : { "latitude":40.751014, "longitude":-73.990248}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7470",
"name":"35th and 8th",
"street":"494 Eighth Ave.",
"city":"New York",
"location" : { "latitude":40.752633, "longitude":-73.992905}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"11650",
"name":"Hudson & 10th",
"street":"518 Hudson Street",
"city":"New York",
"location" : { "latitude":40.733677, "longitude":-74.006126}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7711",
"name":"15th & Ninth",
"street":"76 9th Ave",
"city":"New York",
"location" : { "latitude":40.741684, "longitude":-74.004629}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7255",
"name":"8th & 16th",
"street":"124 Eighth Avenue",
"city":"New York",
"location" : { "latitude":40.741152, "longitude":-74.001294}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7586",
"name":"19th & 8th",
"street":"177 Eighth Avenue",
"city":"New York",
"location" : { "latitude":40.742999, "longitude":-74.000343}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7622",
"name":"15th & Third",
"street":"145 Third Avenue",
"city":"New York",
"location" : { "latitude":40.733749, "longitude":-73.986598}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7285",
"name":"22nd St. & Sixth Ave.",
"street":"684 Avenue of the Americas",
"city":"New York",
"location" : { "latitude":40.741844, "longitude":-73.993237}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"14618",
"name":"23rd - 24th & 7th",
"street":"229 Seventh Avenue",
"city":"New York",
"location" : { "latitude":40.744315, "longitude":-73.99525}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"10396",
"name":"21st & 5th",
"street":"4 W. 21st Street",
"city":"New York",
"location" : { "latitude":40.740382, "longitude":-73.991165}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"14442",
"name":"19th & Park",
"street":"240 Park Avenue South",
"city":"New York",
"location" : { "latitude":40.73798, "longitude":-73.988303}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"13539",
"name":"23rd btwn 5th & 6th",
"street":"14 W. 23rd St",
"city":"New York",
"location" : { "latitude":40.741661, "longitude":-73.990313}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7587",
"name":"24th & 6th",
"street":"750 6th Avenue",
"city":"New York",
"location" : { "latitude":40.743574, "longitude":-73.992028}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"5072",
"name":"Fashion Inst of Technology",
"street":"227 W 27th St",
"city":"New York",
"location" : { "latitude":40.747097, "longitude":-73.994576}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7277",
"name":"23rd & Park",
"street":"304 Park Avenue South",
"city":"New York",
"location" : { "latitude":40.74016, "longitude":-73.986971}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"13538",
"name":"28th & Seventh",
"street":"315 Seventh Avenue",
"city":"New York",
"location" : { "latitude":40.746974, "longitude":-73.993323}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7826",
"name":"33rd & Tenth",
"street":"450 W. 33rd Street",
"city":"New York",
"location" : { "latitude":40.753066, "longitude":-73.999424}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7792",
"name":"27th & Sixth",
"street":"776 Avenue of the Americas",
"city":"New York",
"location" : { "latitude":40.745213, "longitude":-73.990874}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7420",
"name":"261 5th Avenue",
"street":"261 Fifth Avenue",
"city":"New York",
"location" : { "latitude":40.745069, "longitude":-73.986861}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9722",
"name":"31st and Sixth Avenue",
"street":"875 Sixth Ave",
"city":"New York",
"location" : { "latitude":40.748026, "longitude":-73.989251}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7353",
"name":"1 Penn Plaza",
"street":"1 Penn Plaza",
"city":"New York",
"location" : { "latitude":40.752586, "longitude":-73.992834}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7851",
"name":"Penn Station LIRR",
"street":"1 Penn Plaza Concourse Level",
"city":"New York",
"location" : { "latitude":40.752587, "longitude":-73.992835}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"13791",
"name":"Penn Station LIRR #2",
"street":"1 Penn Plaza, Concourse level",
"city":"New York",
"location" : { "latitude":40.752587, "longitude":-73.992835}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7709",
"name":"76th & Columbus",
"street":"338 Columbus Avenue",
"city":"New York",
"location" : { "latitude":40.779982, "longitude":-73.977146}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"11765",
"name":"Sixth & 58th",
"street":"1411 Sixth Avenue",
"city":"New York",
"location" : { "latitude":40.764767, "longitude":-73.97709}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"10279",
"name":"W. 56th & 6th",
"street":"1380 Sixth Avenue",
"city":"New York",
"location" : { "latitude":40.763839, "longitude":-73.977174}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7344",
"name":"60th & Broadway-II",
"street":"1841 Broadway",
"city":"New York",
"location" : { "latitude":40.768869, "longitude":-73.982343}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7575",
"name":"43rd St & Third Ave",
"street":"685 Third Avenue",
"city":"New York",
"location" : { "latitude":40.751585, "longitude":-73.97359}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"13455",
"name":"42nd & Second",
"street":"220 East 42nd St",
"city":"New York",
"location" : { "latitude":40.749768, "longitude":-73.973188}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7698",
"name":"57th & Seventh",
"street":"142 W. 57th Street",
"city":"New York",
"location" : { "latitude":40.764875, "longitude":-73.97897}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7245",
"name":"57th btwn 8th & 9th",
"street":"322 West 57th Street",
"city":"New York",
"location" : { "latitude":40.767558, "longitude":-73.983086}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7696",
"name":"120 W. 56th",
"street":"120 W. 56th Street",
"city":"New York",
"location" : { "latitude":40.76402, "longitude":-73.978898}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8615",
"name":"West 55th & 7th",
"street":"870 7th Avenue",
"city":"New York",
"location" : { "latitude":40.764304, "longitude":-73.980913}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9240",
"name":"1345 Ave. of the Americas Acquisiti",
"street":"1345 6th Ave",
"city":"New York",
"location" : { "latitude":40.76201, "longitude":-73.978533}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"2784",
"name":"53rd & Sixth",
"street":"1330 6th Ave.",
"city":"New York",
"location" : { "latitude":40.761933, "longitude":-73.978633}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8965",
"name":"51st between Park & Madison",
"street":"45 E. 51st Street",
"city":"New York",
"location" : { "latitude":40.758144, "longitude":-73.974267}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8992",
"name":"54th & Broadway",
"street":"1710 Broadway",
"city":"New York",
"location" : { "latitude":40.764046, "longitude":-73.98223}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9239",
"name":"1290 Ave. of the Americas",
"street":"1290 6th Ave",
"city":"New York",
"location" : { "latitude":40.760757, "longitude":-73.979621}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7673",
"name":"52nd & Seventh",
"street":"156 W 52nd St",
"city":"New York",
"location" : { "latitude":40.76183, "longitude":-73.981144}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7424",
"name":"48th & Park",
"street":"280 Park Avenue",
"city":"New York",
"location" : { "latitude":40.756423, "longitude":-73.975073}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"11736",
"name":"49th & Madison",
"street":"425 Madison Avenue",
"city":"New York",
"location" : { "latitude":40.756963, "longitude":-73.975901}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"2785",
"name":"47th & Eighth",
"street":"770 Eighth Ave",
"city":"New York",
"location" : { "latitude":40.760626, "longitude":-73.987171}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7443",
"name":"Rockefeller Center Concourse",
"street":"30 Rockefeller Plaza, Space A",
"city":"New York",
"location" : { "latitude":40.758759, "longitude":-73.978691}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7501",
"name":"52nd Street and 8th Ave",
"street":"871 8th Avenue",
"city":"New York",
"location" : { "latitude":40.763701, "longitude":-73.985292}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7444",
"name":"Rockefeller Center Subway",
"street":"30 Rockefeller Plaza",
"city":"New York",
"location" : { "latitude":40.758852, "longitude":-73.979169}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"15388",
"name":"ARAMARK @ JP Morgan Chase New York",
"street":"270 Park Ave",
"city":"New York",
"location" : { "latitude":40.75582, "longitude":-73.975683}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7282",
"name":"49th & 7th",
"street":"750 Seventh Avenue",
"city":"New York",
"location" : { "latitude":40.760755, "longitude":-73.983693}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7426",
"name":"575 Fifth Avenue (Relocation)",
"street":"575 Fifth Avenue",
"city":"New York",
"location" : { "latitude":40.756428, "longitude":-73.97853}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7577",
"name":"45th & Park Avenue",
"street":"230 Park Avenue",
"city":"New York",
"location" : { "latitude":40.754532, "longitude":-73.976097}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7663",
"name":"90th & First",
"street":"400 East 90th Street",
"city":"New York",
"location" : { "latitude":40.779119, "longitude":-73.947474}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"14218",
"name":"103rd & Broadway",
"street":"2690 Broadway",
"city":"New York",
"location" : { "latitude":40.798882, "longitude":-73.968372}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7699",
"name":"95th & Broadway",
"street":"2521 Broadway",
"city":"New York",
"location" : { "latitude":40.793864, "longitude":-73.972744}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7474",
"name":"93rd and Broadway",
"street":"2498 Broadway",
"city":"New York",
"location" : { "latitude":40.792522, "longitude":-73.973027}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7534",
"name":"B'way & 114 Street (New World)",
"street":"2929 Broadway",
"city":"New York",
"location" : { "latitude":40.807108, "longitude":-73.96491}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"14498",
"name":"Broadway btwn 87th & 88th",
"street":"2394 Broadway",
"city":"New York",
"location" : { "latitude":40.789286, "longitude":-73.975324}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7394",
"name":"81st & Columbus",
"street":"444 Columbus Avenue",
"city":"New York",
"location" : { "latitude":40.783633, "longitude":-73.974456}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7557",
"name":"50th & Second",
"street":"943 Second Avenue",
"city":"New York",
"location" : { "latitude":40.755042, "longitude":-73.968613}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7675",
"name":"14th & Sixth",
"street":"510 Sixth Avenue",
"city":"New York",
"location" : { "latitude":40.737022, "longitude":-73.996494}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7407",
"name":"92nd & 3rd",
"street":"1642 Third Avenue",
"city":"New York",
"location" : { "latitude":40.782627, "longitude":-73.951431}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9439",
"name":"84th & Third Ave",
"street":"1488 Third Avenue #A",
"city":"New York",
"location" : { "latitude":40.777492, "longitude":-73.955133}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7465",
"name":"2 Columbus Ave.",
"street":"2 Columbus Avenue",
"city":"New York",
"location" : { "latitude":40.769313, "longitude":-73.984905}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"831",
"name":"32nd @ 2nd Ave.",
"street":"585 2nd Avenue",
"city":"New York",
"location" : { "latitude":40.743679, "longitude":-73.976866}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7414",
"name":"47th & 9th",
"street":"682 9th Avenue",
"city":"New York",
"location" : { "latitude":40.761614, "longitude":-73.990046}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"11277",
"name":"Lexington & 85th",
"street":"1261 Lexington Avenue",
"city":"New York",
"location" : { "latitude":40.778649, "longitude":-73.956036}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"3421",
"name":"West 23rd and 8th",
"street":"300 W 23rd St.",
"city":"New York",
"location" : { "latitude":40.745103, "longitude":-73.998743}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7558",
"name":"96th & Madison",
"street":"1378 Madison Avenue",
"city":"New York",
"location" : { "latitude":40.787139, "longitude":-73.954486}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7858",
"name":"17th & First (Stuyvesant Town)",
"street":"286 First Avenue, A",
"city":"New York",
"location" : { "latitude":40.732401, "longitude":-73.981499}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8770",
"name":"80th & York",
"street":"1515 York Avenue",
"city":"New York",
"location" : { "latitude":40.772414, "longitude":-73.949904}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7261",
"name":"Greenwich Avenue",
"street":"93 Greenwich Avenue",
"city":"New York",
"location" : { "latitude":40.73744, "longitude":-74.001641}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9467",
"name":"43rd & Ninth",
"street":"593 Ninth Ave",
"city":"New York",
"location" : { "latitude":40.758934, "longitude":-73.992514}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7612",
"name":"60th & First",
"street":"1102 1st Ave",
"city":"New York",
"location" : { "latitude":40.760348, "longitude":-73.961138}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7874",
"name":"2138 Broadway",
"street":"2140 Broadway",
"city":"New York",
"location" : { "latitude":40.781019, "longitude":-73.981072}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7354",
"name":"70th & Broadway",
"street":"2045 Broadway",
"city":"New York",
"location" : { "latitude":40.777773, "longitude":-73.982557}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"819",
"name":"Columbus @ 67th",
"street":"152 - 154 Columbus Avenue",
"city":"New York",
"location" : { "latitude":40.774211, "longitude":-73.981356}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"821",
"name":"Third @ 66th",
"street":"1128 Third Avenue",
"city":"New York",
"location" : { "latitude":40.765935, "longitude":-73.963591}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"823",
"name":"Lexington & 78th",
"street":"1117 Lexington Ave., #4",
"city":"New York",
"location" : { "latitude":40.774115, "longitude":-73.959318}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7672",
"name":"85th & First",
"street":"1631 1st Ave",
"city":"New York",
"location" : { "latitude":40.776103, "longitude":-73.949968}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"11423",
"name":"Macy's 35th Street Balcony",
"street":"151 W 34th Street",
"city":"New York",
"location" : { "latitude":40.750942, "longitude":-73.989757}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"8614",
"name":"58th & 8th",
"street":"4 Columbus Circle",
"city":"New York",
"location" : { "latitude":40.767539, "longitude":-73.983111}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"847",
"name":"6th & Waverly (Waverly Place)",
"street":"378 6th Avenue",
"city":"New York",
"location" : { "latitude":40.733037, "longitude":-73.99976}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7507",
"name":"33rd Street and 5th Avenue (Old Ban",
"street":"334 Fifth Ave.",
"city":"New York",
"location" : { "latitude":40.747763, "longitude":-73.985306}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"818",
"name":"Second @ 81st",
"street":"1559 2nd Avenue",
"city":"New York",
"location" : { "latitude":40.774639, "longitude":-73.95433}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7682",
"name":"76th & Second",
"street":"1449 Second Avenue",
"city":"New York",
"location" : { "latitude":40.771213, "longitude":-73.956828}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7341",
"name":"23rd & 3rd",
"street":"296-300 Third Avenue",
"city":"New York",
"location" : { "latitude":40.738792, "longitude":-73.983401}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7800",
"name":"Grand Central Station 2",
"street":"7800 Grand Central Station, Track 35",
"city":"New York",
"location" : { "latitude":40.752347, "longitude":-73.977456}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"7386",
"name":"111th & Broadway",
"street":"2853 Broadway",
"city":"New York",
"location" : { "latitude":40.804695, "longitude":-73.96667}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"1379",
"name":"Target East River Plaza T-2380",
"street":"517 E 117th St",
"city":"New York",
"location" : { "latitude":40.795688, "longitude":-73.932552}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"75491",
"name":"Limited Brands-NYC",
"street":"1740 Broadway",
"city":"New York",
"location" : { "latitude":40.765221, "longitude":-73.982023}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"75271",
"name":"Javits Convention Ctr Taxi North",
"street":"655 W 34th St",
"city":"New York",
"location" : { "latitude":40.756782, "longitude":-74.003423}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"9239",
"name":"1290 Sixth Ave (Ave of Americas)",
"street":"1290 Sixth Avenue",
"city":"New York",
"location" : { "latitude":40.760875, "longitude":-73.979729}
},
{
"_class":"example.springdata.mongodb.repo.Store",
"id":"75846",
"name":"Waldorf-Astoria",
"street":"301 Park Ave",
"city":"New York",
"location" : { "latitude":40.75656, "longitude":-73.97405}
}
]
2、初始化mongo数据
/**
* 初始化mongo数据
*
* @return
*/
public @Bean
AbstractRepositoryPopulatorFactoryBean repositoryPopulator() {
ObjectMapper mapper = new ObjectMapper();
// 封装JSON,让第一个类拥有第二个类的注释
mapper.addMixIn(GeoJsonPoint.class, GeoJsonPointMixin.class);
mapper.configure(FAIL_ON_UNKNOWN_PROPERTIES, false);
Jackson2RepositoryPopulatorFactoryBean factoryBean = new Jackson2RepositoryPopulatorFactoryBean();
factoryBean.setResources(new Resource[] { new ClassPathResource("starbucks-in-nyc.json") });
factoryBean.setMapper(mapper);
return factoryBean;
}
static abstract class GeoJsonPointMixin {
GeoJsonPointMixin(@JsonProperty("longitude") double x, @JsonProperty("latitude") double y) {}
}
3、查询操作
@Autowired
private MongoOperations mongoOps;
@Autowired
private StoreRepository repository;
@Before
public void setUp() {
initGeo();
}
@After
public void destory(){
mongoOps.dropCollection(Venue.class);
}
/**
* 地理坐标操作
*/
@Test
public void testGeoSpatial(){
// 圆形查找
Circle circle = new Circle(30, 20, 20);
List<Venue> venues =
mongoOps.find(new Query(Criteria.where("location").within(circle)), Venue.class);
System.out.println(venues);
System.out.println(venues.size());
// 球型查询
venues = mongoOps.find(new Query(Criteria.where("location").withinSphere(circle)), Venue.class);
System.out.println(venues);
System.out.println(venues.size());
// 矩形查找
Box box = new Box(new Point(10, 11), new Point(10, 20));
venues = mongoOps.find(new Query(Criteria.where("location").within(box)), Venue.class);
System.out.println(venues);
System.out.println(venues.size());
// 按距离由近到远查询
Point point = new Point(12, 12);
venues = mongoOps.find(new Query(Criteria.where("location").near(point).maxDistance(20)), Venue.class);
System.out.println(venues.size());
System.out.println(venues);
// 空间距离查询
venues = mongoOps.find(new Query(Criteria.where("location").nearSphere(point).maxDistance(20)), Venue.class);
System.out.println(venues.size());
System.out.println(venues);
// 最近点查询
NearQuery query = NearQuery.near(point).maxDistance(new Distance(100000, Metrics.KILOMETERS));
GeoResults<Venue> result = mongoOps.geoNear(query, Venue.class);
System.out.println(result);
}
/**
* 使用GeoJSON和遗留格式调用它
*/
@Test
public void testGeoJSON(){
/*
* {
* "location": {
* "$geoWithin": {
* "$geometry": {
* "type": "Polygon",
* "coordinates": [
* [
* [-73.992514,40.758934],
* [-73.961138,40.760348],
* [-73.991658,40.730006],
* [-73.992514,40.758934]
* ]
* ]
* }
* }
* }
* }
*/
List<Store> storeList = repository.findByLocationWithin(
new GeoJsonPolygon(
new Point(-73.992514, 40.758934),
new Point(-73.961138, 40.760348),
new Point(-73.991658, 40.730006),
new Point(-73.992514, 40.758934)));
System.out.println(storeList);
System.out.println(storeList.size());
/*
* {
* "location" : {
* "$geoWithin" : {
* "$polygon" : [ [-73.992514,40.758934] , [-73.961138,40.760348] , [-73.991658,40.730006] ]
* }
* }
* }
*/
storeList = repository.findByLocationWithin(
new Polygon(
new Point(-73.992514, 40.758934),
new Point(-73.961138, 40.760348),
new Point(-73.991658, 40.730006)));
System.out.println(storeList);
System.out.println(storeList.size());
}
private void initGeo(){
for (int x = 100; x < 131; x++) {
for (int y = 30; y < 61; y++) {
Double loca[] = new Double[]{Double.valueOf(x), Double.valueOf(y)};
Venue venue = new Venue("venue" + Arrays.toString(loca),Double.valueOf(x), Double.valueOf(y));
mongoOps.insert(venue);
}
}
}