- Datastore
- Get 方法
- Find 方法
- Save 方法
- Delete 方法
- FindAndDelete 方法
- Update 方法
- Ensure Indexes and Caps
Get方法 Get方法返回一个实体对象通过@Id。get方法只是find(...)方法的一个精简通过ID访问。他会返回一个实体对象,或者null如果没有找到的话。 Datastore ds = ... Hotel hotel = ds.get(Hotel.calss, hotelId);
Find方法 find方法只是对Query的一个轻量级的包裹。 作为包裹他将返回一个Query,他将支持Iterable<T>和QueryResults接口。
Datastore ds = ...
//在循环中使用
for(Hotel hotel : ds.find(Hotel.class, "stars >", 3))
print(hotel);
//作为一个list返回
List<Hotel> hotels = ds.find(Hotel.class, "stars >", 3).asList();
//对结果排序
List<Hotel> hotels = ds.find(Hotel.class, "stars >", 3).sort("-stars").asList();
//返回第一个符合条件的结果,
Hotel gsHotel = ds.find(Hotel.class, "name", "Grand Sierra").get();
//same as
Hotel gsHotel = ds.find(Hotel.class, "name =", "Grand Sierra").get();
这里是有效的操作符列表["=", "==", "!=", "<>", ">", "<", ">=", "<=", "in", "nin", "all", "size", "exists"] 如果没有指定操作符默认使用"=", 就像上面的例子,"="和“==”是等价的表示相等,"!="和"<>"是等价的表示不想等。 Save方法 很多方法工作在幕后。本方法直截了当。
Datastore ds = ... Hotel hotel = new Hotel(); ds.save(hotel); //@Id field is filled in for you (after the save), if you didn't set it. ObjectId id = hotel.getId();
Delete方法 他很好的自我解释,这个方法将会基于一个查询,id或一个实体删除数据项。
Datastore ds = ... ds.delete(Hotel.class, "Grand Sierra Resort"); //use a query ds.delete(ds.createQuery(Hotel.class).filter("pendingDelete", true));
FindAndDelete方法 在MongoDB中有个潜在功能是以原子方式做一些操作。这个和删除一个实体,并且同时返回要删除的项。FindAndDelete方法讲首先查询要删除的项, 并且删除。 Update方法 Updates应用在服务器上并且允许复杂但非常有效的修改。 假设你要跟踪一个用户的最近登录信息。在任何成功登录你网站的用户都修改时间,但是你不必加载此用户的信息然后在重新保存整个对象信息。相反,你 可以局部的修改并且执行一个有效的修改。
@Entity class User { @Id private ObjectId id; private long lastLogin; //... other members private Query<User> queryToFindMe(){ return datastore.createQuery(User.class).field(Mapper.ID_KEY).equal(id); } public void loggedIn(){ long now = System.currentTimeMillis(); UpdateOperations<User> ops = datastore.createUpdateOperations(User.class).set("lastLogin", now); ds.update(queryToFindMe(), ops); lastLogin = now; } } //maybe add example on managing an embedded array of login times
Ensure Indexs and Caps 这些方法需要你在已经注册你的实体类到Morphia中后调用。它将异步创建你的索引,和附加到你的collections中。这个将在你每次启动你的应用时 都执行一次。 注意:如果在一个存在的系统中,已经存在了索引和附加到了collections上,将不会在花费任何时间。
Morphia m = ... Datastore ds = ... m.map(MyEntity.class); ds.ensureIndexes(); //creates all defined with @Indexed ds.ensureCaps(); //creates all collections for @Entity(cap=@CappedAt(...))
英语水平有限,请大侠斧正 原文连接:http://code.google.com/p/morphia/wiki/Datastore#Ensure_Indexes_and_Caps