Mongodb 的ORM框架 Morphia 之 Datasotre接口

时间:2021-01-05 08:43:45
  • 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