java中mongodb的查询及排序
已有 30435人阅读此文 - - JAVAMongodb除了高性能外,还有完善的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()); } } }
以下是与本文相关的文章:
期待你一针见血的评论,Come on!