我使用彈簧數據和mongodb來創建應用程序。彈簧數據mongodb日期範圍查詢
我有這樣的對象:
public class Room {
private String name;
private List<Date> occupied;
}
我想用mongodbTemplate
最好讓未佔用日期範圍房間的列表。
因此,例如,如果我有一個開始日期10/10/2014和結束日期15/10/2014我想獲得列表中沒有的房間列表佔據日期10,11,12, 2014年10月13,14,15。
有沒有人有這方面的想法?
更新:
我已經找到一種方法,通過使用該查詢做到這一點:
query.addCriteria(Criteria.where("occupiedDates")
.ne(from).andOperator(
Criteria.where("occupiedDates").ne(to))
);
的問題是,我不能動態添加andOperator。
如果可能,我寧願在標準內添加日期列表。
一個實例文檔(只有一個記錄在蒙戈存在這一個):
間(bedcount = 1,bedtype1 = 1,bedtype2 = 0,bedtype3 = 0,bedtype4 = 0,
文件類型= NULL,noofrooms = 0,佔用= 0,照片= NULL,rateid = 1,
ROOMNAME = NULL,roomno = 888,狀態= NULL,
roomTypeID = 26060747427845848211948325568,occupiedDates = [太陽08月10
00:00 :00 EEST 2014,8月1日星期一00:00:00 EEST 2014,8月12日星期二00:00:00
EEST 2014,Wed Aug 13 00:00:00 EEST 2014],屬性= {})
這是的wyeru是如何構建的代碼:
SimpleDateFormat dateFormat = new SimpleDateFormat("dd-M-yyyy hh:mm:ss");
Date to = null;
Date from = null;
try {
to = dateFormat.parse("12-08-2014 00:00:00");
from = dateFormat.parse("10-08-2014 00:00:00");
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
DBObject c1 = new BasicDBObject("occupied", null);
DBObject c2 = BasicDBObjectBuilder.start()
.push("occupied").push("$not")
.push("$elemMatch").add("$gte", from).add("$lte", to).get();
Criteria c = Criteria.where("$or").is(Arrays.asList(c1, c2));
Query query = new Query().addCriteria(c);
List<Room> rooms = mongoTemplate.find(query, Room.class);
該查詢被髮送到的MongoDB
{ "$or" : [
{ "occupied" : null } ,
{ "occupied" :
{ "$not" :
{ "$elemMatch" :
{ "$gte" : { "$date" : "2014-08-09T21:00:00.000Z"} ,
"$lte" : { "$date" : "2014-08-11T21:00:00.000Z"}
}
}
}
}
]}
由此我們瞭解到查詢應該不會返回任何內容。但它返回給我1行。
這不是一個直接的答案,但你爲什麼不先閱讀文檔: http://docs.spring.io/spring-data/mongodb/docs/1.3.x/reference/html/mongo.repositories.html這真的很有幫助,並會解決您的問題。 – 2014-10-03 09:43:41
當然,我已閱讀文檔,我找不到溶劑,否則我不會問:) – giannisapi 2014-10-03 09:50:31
@帕特里克,謝謝你的好編輯:) – giannisapi 2015-06-09 06:41:28