MongoRepository實現增刪改查和複雜查詢【支持的查詢類型】

與HibernateRepository相似,經過繼承MongoRepository接口,咱們能夠很是方便地實現對一個對象的增刪改查,要使用Repository的功能,先繼承MongoRepository<T, TD>接口,其中T爲倉庫保存的bean類,TD爲該bean的惟一標識的類型,通常爲ObjectId。以後在service中注入該接口就能夠使用,無需實現裏面的方法,spring會根據定義的規則自動生成。
下面是支持的查詢類型,每三條數據分別對應:(方法後綴,方法例子,MongoDB原生查詢語句)java

GreaterThan(大於) 
findByAgeGreaterThan(int age) 
{"age" : {"$gt" : age}}spring

LessThan(小於) 
findByAgeLessThan(int age) 
{"age" : {"$lt" : age}}mongodb

Between(在...之間) 
findByAgeBetween(int from, int to) 
{"age" : {"$gt" : from, "$lt" : to}}lua

IsNotNull, NotNull(是否非空) 
findByFirstnameNotNull() 
{"age" : {"$ne" : null}}spa

IsNull, Null(是否爲空) 
findByFirstnameNull() 
{"age" : null}.net

Like(模糊查詢) 
findByFirstnameLike(String name) 
{"age" : age} ( age as regex)code

(No keyword) findByFirstname(String name) 
{"age" : name}對象

Not(不包含) 
findByFirstnameNot(String name) 
{"age" : {"$ne" : name}}繼承

Near(查詢地理位置相近的) 
findByLocationNear(Point point) 
{"location" : {"$near" : [x,y]}}接口

Within(在地理位置範圍內的) 
findByLocationWithin(Circle circle) 
{"location" : {"$within" : {"$center" : [ [x, y], distance]}}}

Within(在地理位置範圍內的) 
findByLocationWithin(Box box) 
{"location" : {"$within" : {"$box" : [ [x1, y1], x2, y2]}}}

@Query(value="{ 'name':{'$regex':?2,'$options':'i'}, sales':{'$gte':?1,'$lte':?2}}",fields="{ 'name' : 1, 'age' : 1}") 
public Page<Product> findByNameAndAgeRange(String name,double ageFrom,double ageTo,Pageable page);

查詢發生時間是2016年以後的

> db.station_evaluation.find({"currenttime":{$gt:new Date('2016-12-12 12:12:12')}});

查詢經緯度符合條件的

> db.station_evaluation.find({"currenttime":{$gt:new Date('2016-12-12 12:12:12')},"latitude" : "22.560890570746526"});

查詢知足發生時間以後,而且該字段必定存在的

> db.station_evaluation.find({"currenttime":{$gt:new Date('2016-12-12 12:12:12')},"currenttime" : {$exists:1}});
相關文章
相關標籤/搜索