java中mongodb的查询及排序

已有 27480人阅读此文 - - JAVA

      Mongodb除了高性能外,还有完善的API进行各种查询操作,本教程中,我将为你演示一些通用的方法来实现mongodb的查询,包括组合查询,区间查询,like查询,in查询等方法。希望在阅读本文后能举一反三组合成更复杂的查询。

 

下面直接上代码,每个代码里有详细的注释,有疑问请留言。


public class MongoDbFind {
    public static final int port = 27017;
    public static final String host = "127.0.0.1";
    /**
     * 获取数据库对象
     *
     * @return
     */
    private MongoDatabase getDb() {
        MongoClient mongo = new MongoClient(host, port);
        MongoDatabase db = mongo.getDatabase("new_db");
        return db;
    }
    /**
     * 获取表(集合)
     *
     * @return
     */
    private MongoCollection getCollection() {
        MongoDatabase db = getDb();
        MongoCollection<Document> table = db.getCollection("user");
        return table;
    }
    /**
     * 查询出一条数据
     */
    @Test
    public void findOne() {
        MongoCollection table = getCollection();
        BasicDBObject dbObject = new BasicDBObject();
        //mongodb中按age字段倒序查询(-1是倒序,1是正序)
        dbObject.put("age",-1);
        FindIterable iterate = table.find().sort(dbObject).limit(1);
        System.out.println(iterate.iterator().tryNext());
    }
    /**
     * mongodb分页查询
     *
     * @param pageIndex 当前页码
     */
    private void findPage(int pageIndex) {
        int pageSize = 3;
        MongoCollection table = getCollection();
        //mongodb分页查询出游标
        MongoCursor cursor = table.find().limit(pageSize).skip((pageIndex - 1) * pageSize).iterator();
        System.out.println("当前页:" + pageIndex);
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }
    @Test
    public void findPage() {
        findPage(1);
        findPage(2);
    }
    /**
     * 等于查询
     */
    @Test
    public void comparison() {
        MongoCollection table = getCollection();
        BasicDBObject dbObject = new BasicDBObject();
        dbObject.put("age", 20);
        //查询出年龄是20的记录
        MongoCursor cursor = table.find(dbObject).iterator();
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }
    /**
     * 使用in包含查询
     */
    @Test
    public void findIn() {
        //定义一个数组存储in查询的条件值
        List<Integer> list = new ArrayList<>(4);
        list.add(20);
        list.add(28);
        list.add(15);
        list.add(13);
        MongoCollection table = getCollection();
        BasicDBObject dbObject = new BasicDBObject();
        //这里使用BasicDBObject嵌套来并使用$in预定义名称来实现mongodb的in查询功能
        dbObject.put("age", new BasicDBObject("$in", list));
        MongoCursor cursor = table.find(dbObject).iterator();
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }
    /**
     * 大于小于区间查询
     */
    @Test
    public void findGtLt()
    {
        MongoCollection table = getCollection();
        BasicDBObject dbObject = new BasicDBObject();
        //mongodb实现大于小于区间的查询,注意大于是$gt,小于是$lt
        dbObject.put("age", new BasicDBObject("$gt", 15).append("$lt",25));
        MongoCursor cursor = table.find(dbObject).iterator();
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }
    /**
     * 不等于查询
     */
    @Test
    public void findNe()
    {
        MongoCollection table = getCollection();
        BasicDBObject dbObject = new BasicDBObject();
        dbObject.put("age", new BasicDBObject("$ne",17));
        MongoCursor cursor = table.find(dbObject).iterator();
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }
    /**
     * 多条件查询
     */
    @Test
    public void findMulti()
    {
        MongoCollection table = getCollection();
        //多条件查询需要先定义一个BasicDBObject数组来存储多个条件
        List<BasicDBObject> objects = new ArrayList<BasicDBObject>();
        objects.add(new BasicDBObject("age", new BasicDBObject("$ne", 17)));
        objects.add(new BasicDBObject("name","zicheng-3"));
        BasicDBObject query=new BasicDBObject();
        query.put("$and",objects);
        MongoCursor cursor = table.find(query).iterator();
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }
    /**
     * 通过使用正则表达式模糊查询
     */
    @Test
    public void findRegex()
    {
        MongoCollection table = getCollection();
        BasicDBObject regexQuery = new BasicDBObject();
        regexQuery.put("name", new BasicDBObject("$regex", "自成.*-[1-8]"));
        //打印mongodb的查询条件
       // System.out.println(regexQuery.toString());
        MongoCursor cursor = table.find(regexQuery).iterator();
        while (cursor.hasNext()) {
            System.out.println(cursor.next());
        }
    }
}


来源:自成e家 出处:java中mongodb的查询及排序
本文由 自成e家 原创 ,转载请注明出处,你的支持是我继续写作、分享的最大动力!