- Datastore
- Get 方法
- Find 方法
- Save 方法
- Delete 方法
- FindAndDelete 方法
- Update 方法
- Ensure Indexes and Caps
Datastore
Datastore接口为你把Java对象保存到MongoDB或从MongoDB中访问Java对象提供了安全类型的方法。它提供了get/find/save/delete方法为你操作Java
对象。
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