查找

每次查找之前都需要先用query.use("集合名")声明要查找的集合。所有的查找如果没有使用反序列化的话默认是返回的json对象或者是json的list

根据id查找

query.use("item").byId("5710a81ab73a87092e17a02b").find()

查找所有

query.use("item").findAll()    

根据条件查找

query.use("item").eq("b","2").find()    

(ps:MongoDB区分文本和数字,设定条件时要注意)

反序列化查找结果(findAll和分页查询也都是支持的)

query.use("item").eq("b","2").find(xx.class)  

获取结果数量

query.use("item").eq("b","2").count()    

条件

在use后面接着的就是条件,支持以下条件:

  • in() 包含,如果key为_id会自动将文本id转为mongodb所需的ObjectId
  • eq() 等于
  • ne() 不等于
  • gt() 大于
  • lt() 小于
  • gte() 大于等于
  • lte() 小于等于
  • like() 模糊查找,like除了支持含有,还支持以什么开头或以什么结尾的查找。
  • like(int type,String key, String value) 1为以什么开头,除了1以外的数字都是以什么结尾。
  • 如果还需要更多的条件,可以通过 query.filter() 来加载原生条件,如: query.filter(Filters.in(key, value)) ,这里的filter是mongodb驱动自带的,想要知道更多条件可以到http://mongodb.github.io/mongo-java-driver/3.2/builders/filters/

所有的条件都是默认以and连接,所以可以接多个条件,更新、查找、删除都是使用这种方式,比如我要查找一个年龄小于18岁名字中含有“陈”这个字的男生。

query.lt("age",18).eq("sex","man").like("name","陈").find()    

如果想要用or连接或者nor的话可以这么做:


query.use("teacher").or(new MongoQuery().eq("name","卫越相"),new MongoQuery().eq("name","危兴修")).find();

//将条件写在or里面

在1.0.7版本中增加join特性,如果在插入时用join(本集合的字段名, 要关联的集合名, 要关联的ObjectId) 插入的话,就可以在查找时利用join查找出来,直接join("本集合的字段名"),注意join只支持关联单个ObjectId,如需更实现类似mysql的join的话可以参考聚合运算

排序和数量

find是支持排序和数量的,下面有两个例子。

query.lt("age",18).后接以下方法:   

 .ascending(升序条件1,升序条件2....) 
 .descending(降序条件1,降序条件2...)
 .limit(限定结果数量)     
 .projection(只返回列1,只返回列2...)
 .skip(跳过多少行)

排序条件要求使用原生驱动的写法,详情见http://mongodb.github.io/mongo-java-driver/3.2/builders/sorts/

当然如果你只要一个结果可以用findOne,而不是find。比如根据id查找;如果是想知道某个结果是否存在可以将find()替换成exist()。


query.byId("id").findOne();

其它常见查找:

max(字段名)查找最大的一个、min(字段名)查找最小的一个,exist(字段名)只查找这个字段名存在的。

分页

使用分页很简单,只需要新建一个MongoPaginate对象即可,放入写好查询条件的query对象、每页行数和当前页数即可。


MongoPaginate page=new MongoPaginate(new MongoQuery().use("student").descending("age").join("teacher"),每页行数,当前页数);

page.findAll(Student.class); //无视条件查找所有

page.find();//根据条件查找

注意不要在被放入的query对象中使用limit和skip条件,以免影响到查询结果。

results matching ""

    No results matching ""