play framework框架下,连接到MongoDB时的特殊操作(与或查询,模糊查询,范围查询,数据排序等)
2017-03-09 16:03
615 查看
现有班级信息表:
具体如下:
查询为一班的所有同学的或者叫”杨洛”或者姓名为”林雨”的同学:
在这里 用java.util.regex.Pattern对象即可
具体如下:
查询杨姓同学
具体如下:
查询一班年龄大于等于20岁的同学
注意,由于官方文件没写怎么正序倒序,于是我查了一下源代码,他是这样定义的:
如果在条件前加负号(‘-‘),则按该条件倒序排列,否则默认正序
具体如下:
按照学号排序
为了提高一下各位的能力(其实是我懒),没写备注~
package models; import play.modules.mongo.MongoEntity; import play.modules.mongo.MongoModel; /** * Created by adinlead on 17/03/04. */ @MongoEntity("class_msg") public class ClassMsg extends MongoModel { public Integer class; //班级号 public Integer number; //学号 public String name; //学生姓名 public Integer age; //年龄 }
1.与或查询
1.1与查询(类似于SQL中的AND)
没什么说的,这是最基本的
1.2或查询(类似于SQL中的OR)
在进行或查询时,需要将条件装入查询对象(com.mongodb.BasicDBObject)或者查询列表(com.mongodb.BasicDBList)具体如下:
查询为一班的所有同学的或者叫”杨洛”或者姓名为”林雨”的同学:
BasicDBList params = new BasicDBList(); params.add(new BasicDBObject("name", "杨洛")); params.add(new BasicDBObject("name", "林雨")); List<ClassMsg> resultList = ClassMsg.find("byClassAnd$or",1,params).fetch();
2.模糊查询
在连接到Mongo进行模糊查询时,需要用到正则表达式在这里 用java.util.regex.Pattern对象即可
具体如下:
查询杨姓同学
Pattern pattern = Pattern.compile("^杨.*$", Pattern.CASE_INSENSITIVE); List<ClassMsg> resultList = ClassMsg.find("byName",pattern).fetch();
3.范围查询
范围查询相对简单,只需要用到com.mongodb.BasicDBObject对象具体如下:
查询一班年龄大于等于20岁的同学
/** 大于使用:"$gt" 大于等于使用:"$gte" 小于使用:"$lt" 小于等于使用:"$lte" 不等于使用:"$ne" 其他情况可以去MongoDB教程中查询 **/ // 需要先声明条件 BasicDBObject param = new BasicDBObject("$gte",20) List<ClassMsg> resultList = MongoModel.find("byAge",param).fetch();
X.排序
play framework框架的排序操作是在输入完成查询条件之后,在获得数据之前进行操作的.注意,由于官方文件没写怎么正序倒序,于是我查了一下源代码,他是这样定义的:
如果在条件前加负号(‘-‘),则按该条件倒序排列,否则默认正序
具体如下:
按照学号排序
// 倒序排列 List<ClassMsg> resultList = MongoModel.find().order("by-number").fetch(); // 正序排列 List<ClassMsg> resultList = MongoModel.find().order("byNumber").fetch();
查询实例:
查询一班的杨姓或者年龄大于20岁的同学,并按照学号排序BasicDBList params = new BasicDBList(); Pattern pattern = Pattern.compile("^杨.*$", Pattern.CASE_INSENSITIVE); params.add(new BasicDBObject("name", pattern)); params.add(new BasicDBObject("age", new BasicDBObject("$gte",20))); List<ClassMsg> resultList = ClassMsg.find("byClassAnd$or",1,params).order("byNumber").fetch();
附.
由于在实际生产环境中查询条件可能不固定,而MongoModel又不支持直接传入参数列表,故鄙人写了一了简陋的查询工具,望各位不要见笑:为了提高一下各位的能力(其实是我懒),没写备注~
package utils; import play.modules.mongo.MongoCursor; import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Arrays; import java.util.List; /** * Created by adinlead on 16/11/04. */ public class MongoQuery { public static MongoCursor doQuery(Class<?> clazz, String queryStr, Object[] params) { try { Object single = clazz.newInstance(); Method method = clazz.getDeclaredMethod("find", String.class, Array.newInstance(Object.class, 0).getClass()); return (MongoCursor) method.invoke(single, new Object[]{queryStr, params}); } catch (Exception e) { return null; } } public static MongoCursor doQuery(Class<?> clazz, String queryStr, List params) { return doQuery(clazz, queryStr, params.toArray()); } public static MongoCursor doQuery(Class<?> clazz, StringBuilder queryStr, List params) { return doQuery(clazz, queryStr.toString(), params.toArray()); } public static Long doCount(Class<?> clazz, String queryStr, Object[] params) { try { Object single = clazz.newInstance(); Method method = clazz.getDeclaredMethod("count", String.class, Array.newInstance(Object.class, 0).getClass()); return (Long) method.invoke(single, new Object[]{queryStr, params}); } catch (Exception e) { return null; } } public static Long doCount(Class<?> clazz, String queryStr, List params) { return doCount(clazz, queryStr, params.toArray()); } public static Long doCount(Class<?> clazz, StringBuilder queryStr, List params) { return doCount(clazz, queryStr.toString(), params.toArray()); } }
相关文章推荐
- C#(.NET)数据访问连接、查询、插入等操作的封装类
- Linq排序、分组、模糊查询、调用外部方法、直接执行SQL语句、事务、修改数据
- 使用C#对MongoDB中的数据进行查询,修改等操作
- java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)
- mongodb runCommand命令 范围查询 模糊查询
- [Database] MongoDB (1) 基本连接、操作、查询
- 基于python的REST框架eve测试与mongodb的数据操作
- 数据记录的操作(insert,select,update,delete)函数和分组查询(group by),表连接(join on),嵌套查询(in)
- php操作MongoDB基础教程(连接、新增、修改、删除、查询)
- python连接mongodb操作数据示例(mongodb数据库配置类)
- 2.数据检索|模糊查询|数据排序|数据分组| 常见问题0726
- 一个C#(.NET)数据访问连接、查询、插入等操作的封装类
- 基于python的REST框架eve测试与mongodb的数据操作 推荐
- 利用dbcp数据库连接池连接数据库,并利用dbtuils框架对数据库test中book表进行插入、删除、修改、查询的操作代码
- Yii 框架里数据库操作详解-[增加、查询、更新、删除的方法 'AR一、查询数据集合
- Entity Framework 4 in Action读书笔记——第四章:使用LINQ to Entities查询:排序和连接数据
- 利用dbcp数据库连接池连接数据库,并利用dbtuils框架对数据库test中book表进行插入、删除、修改、查询的操作。book表结构如下:(id,name,price,author,descrip
- 数据数字mongodb 模糊查询以及$type使用
- MYSQL 查询注册7日内无登陆,随后有登陆操作,连接查询,组查询,AND OR优先级,数据表别名
- MongoDB 日期查询与mongodump 按日期范围导出数据