Java操作MongoDB模糊查询和分页查询

作者:lijiao 时间:2023-03-12 20:31:22 

本文实例为大家分享了Java操作MongoDB模糊查询和分页查询,供大家参考,具体内容如下

模糊查询条件:
1、完全匹配
Pattern pattern = Pattern.compile("^name$", Pattern.CASE_INSENSITIVE);
2、右匹配
Pattern pattern = Pattern.compile("^.*name$", Pattern.CASE_INSENSITIVE);
3、左匹配
Pattern pattern = Pattern.compile("^name.*$", Pattern.CASE_INSENSITIVE);
4、模糊匹配
Pattern pattern = Pattern.compile("^.*name8.*$", Pattern.CASE_INSENSITIVE);
记录总数查询:
count(),返回查询总数。
查询记录排序:
BasicDBObject sort = new BasicDBObject();
sort.put("name",1);
1、表示正序;-1.表示倒序
分页查询:
skip(),跳过多少条记录
limit(),返回多少条记录

代码实例:



package com.what21.mongodb.demo;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.regex.Pattern;

import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientOptions;
import com.mongodb.MongoCredential;
import com.mongodb.ServerAddress;

public class OperateDemo2 {

/**
  * @return
  * @throws Exception
  */
 public static MongoClient getMongoClient()throws Exception{
   try {
     //===================================================//
     List<ServerAddress> serverList = new ArrayList<ServerAddress>();
     serverList.add(new ServerAddress("192.168.18.85", 27017));
     //===================================================//
     List<MongoCredential> mcList = new ArrayList<MongoCredential>();
     String username = "root";
     String database = "demo";
     char[] password = "root123".toCharArray();
     mcList.add(MongoCredential.createCredential(username, database,password));
     //===================================================//
     MongoClientOptions.Builder builder = MongoClientOptions.builder();
     // 与目标数据库能够建立的最大connection数量为50
     builder.connectionsPerHost(50);
     // 如果当前所有的connection都在使用中,则每个connection上可以有50个线程排队等待
     builder.threadsAllowedToBlockForConnectionMultiplier(50);
     // 一个线程访问数据库的时候,在成功获取到一个可用数据库连接之前的最长等待时间为2分钟
     // 这里比较危险,如果超过maxWaitTime都没有获取到这个连接的话,该线程就会抛出Exception
     // 故这里设置的maxWaitTime应该足够大,以免由于排队线程过多造成的数据库访问失败
     builder.maxWaitTime(1000*60*2);
     // 与数据库建立连接的timeout设置为1分钟
     builder.connectTimeout(1000*60*1);  
     //===================================================//
     MongoClientOptions mco = builder.build();
     return new MongoClient(serverList, mcList, mco);
   } catch (Exception e) {
     throw e;
   }
 }

/**
  * @param dbname
  * @return
  * @throws Exception
  */
 public static DB getDB(String dbname) throws Exception{
   return getMongoClient().getDB(dbname);
 }

/**
  * @param db
  */
 public static void collections(DB db){
   Set<String> colls = db.getCollectionNames();
   for (String collName : colls) {
     System.out.println(collName);
   }
 }

/**
  * 记录总数查询
  *
  * @param db
  * @param name
  */
 public static void count(DB db,String name){
   DBCollection dbColl = db.getCollection(name);
   int count = dbColl.find().count();
   System.out.println("共有: " + count + "个");
 }

/**
  * 模糊查询
  *
  * @param db
  * @param name
  */
 public static void query(DB db,String name){
   DBCollection dbColl = db.getCollection(name);
   //完全匹配
   //Pattern pattern = Pattern.compile("^name$", Pattern.CASE_INSENSITIVE);
   //右匹配
   //Pattern pattern = Pattern.compile("^.*name$", Pattern.CASE_INSENSITIVE);
   //左匹配
   //Pattern pattern = Pattern.compile("^name.*$", Pattern.CASE_INSENSITIVE);
   //模糊匹配
   Pattern pattern = Pattern.compile("^.*name8.*$", Pattern.CASE_INSENSITIVE);
   BasicDBObject query = new BasicDBObject();
   query.put("name",pattern);
   BasicDBObject sort = new BasicDBObject();
   // 1,表示正序; -1,表示倒序
   sort.put("name",1);
   DBCursor cur = dbColl.find(query).sort(sort);
   int count = 0;
   while (cur.hasNext()) {
     DBObject obj = cur.next();
     System.out.print("name=" + obj.get("name"));
     System.out.print(",email=" + obj.get("email"));
     System.out.println(",passwd=" + obj.get("passwd"));
     count ++;
   }
   System.out.println("共有: " + count + "个");
 }

/**
  * 分页查询
  *
  * @param db
  * @param name
  * @param start
  * @param pageSize
  */
 public static void page(DB db,String name,int start,int pageSize){
   DBCollection dbColl = db.getCollection(name);
   BasicDBObject sort = new BasicDBObject();
   sort.put("name",1);
   DBCursor cur = dbColl.find().sort(sort).skip(start).limit(pageSize);;
   int count = 0;
   while (cur.hasNext()) {
     DBObject obj = cur.next();
     System.out.print("name=" + obj.get("name"));
     System.out.print(",email=" + obj.get("email"));
     System.out.println(",passwd=" + obj.get("passwd"));
     count ++;
   }
   System.out.println("共有: " + count + "个");
 }
 /**
  * @param args
  * @throws Exception
  */
 public static void main(String[] args) throws Exception {
   DB db = getDB("demo");
   collections(db);
   String name = "users";
   System.out.println("count()=================================================");
   count(db,name);
   System.out.println("query()=================================================");
   query(db,name);
   System.out.println("page()=================================================");
   page(db,name,10, 10);
 }

}
标签:Java,MongoDB,模糊查询,分页查询
0
投稿

猜你喜欢

  • 解决Spring Cloud feign GET请求无法用实体传参的问题

    2023-11-17 14:14:05
  • Java反射 PropertyDescriptor类案例详解

    2022-03-13 14:27:32
  • Android使用ViewPager实现图片滑动预览效果

    2023-02-15 15:28:28
  • Android开发之OpenGL绘制2D图形的方法分析

    2023-05-19 09:59:48
  • Mybatis如何使用ognl表达式实现动态sql

    2021-06-22 03:34:49
  • Unity使用LineRender实现签名效果

    2023-08-02 20:40:00
  • 详解Android中的Context抽象类

    2023-01-19 16:21:23
  • 详解用Spring Boot Admin来监控我们的微服务

    2022-02-12 15:18:03
  • Java实现把两个数组合并为一个的方法总结

    2022-08-04 16:30:03
  • springboot中的springSession的存储和获取实现

    2023-11-04 10:23:14
  • Mybatis order by 动态传参出现的问题及解决方法

    2022-07-26 04:13:09
  • Android图片添加水印图片并把图片保存到文件存储的实现代码

    2022-06-03 21:48:54
  • 详细解读Java的Lambda表达式

    2021-12-30 15:32:36
  • C#中Equals和GetHashCode使用及区别

    2023-12-10 14:47:27
  • 深入分析C# 线程同步

    2023-05-09 00:49:44
  • Java多线程程序中synchronized修饰方法的使用实例

    2022-05-08 16:38:56
  • Spring Cloud + Nacos + Seata整合过程(分布式事务解决方案)

    2021-08-31 04:26:52
  • spring boot使用自定义的线程池执行Async任务

    2023-08-15 07:41:25
  • 误将.idea文件提交至git后删除的操作方法

    2022-09-03 09:32:57
  • Android 优化之卡顿优化的实现

    2022-03-03 21:34:25
  • asp之家 软件编程 m.aspxhome.com