play framework架構下,串連到MongoDB時的特殊操作(與或查詢,模糊查詢,範圍查詢,資料排序等)

來源:互聯網
上載者:User

現有班級資訊表:

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進行模糊查詢時,需要用到Regex
在這裡 用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());    }}
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.