Java操作MongoDB模糊查询和分页查询
作者:lijiao 发布时间:2023-03-12 20:31:22
标签:Java,MongoDB,模糊查询,分页查询
本文实例为大家分享了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);
}
}


猜你喜欢
- Spring MVC高级技术包括但不限于web.xml配置、异常处理、跨重定向请求传递数据1、web.xml文件的配置<!DOCTYP
- 一、概述我们知道,当我们对es发起search请求或其他操作时,往往都是随机选择一个coordinator发起请求。而这请求,可能是该节点能
- 1.什么是Spring Boot为什么要学Spring Boot?Spring 的诞生是为了简化 Java 程序的开发的, Spring B
- Android动画 实现开关按钮动画(属性动画之平移动画),最近做项目,根据项目需求,有一个这样的功能,实现类似开关的动画效果,经过自己琢磨
- 6.0的手机对于写入手机需要申请权限的我做了如下处理下面我贴出代码package com.example.admin.sdapplicati
- 上一篇讲解了类型,通过类型来开始本篇的学习;int a[10];上述代码中的a是什么类型呢?相信很多人都知道是一个数组类型,具体来说是一个i
- 这篇文章主要介绍了Springboot整合Shiro的代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,
- 1.创建一个redis maven项目,在pom中添加如下信息spring boot 版本 <parent> <group
- 本文实例为大家分享了Android实现一个仿支付宝支付密码的输入框,主要实现如下:PasswordView.javapackage com.
- Java 和 Groovy 中的映射map都是非常通用的,它允许关键字key和值value为任意类型,只要继承了 Object&n
- 问题描述springcloud项目部署或调试时,占用的内存特别多。当部署到服务器上去后,有可能导致服务器内存占用过多而崩溃。解决方案&nbs
- 实际上,按一定速度读取摄像头视频图像后,便可以对图像进行各种处理了。那么获取主要用到的是VideoCapture类,一个demo如下://如
- 如何获取yml、properties参数1、使用@Value()注解1.1 配置数据如:在properties.yml文件配置如下数据mes
- 本文实例讲述了Java模拟计算机的整数乘积计算功能。分享给大家供大家参考,具体如下:计算机计算整数乘积的原理:实现代码:package ma
- 文章描述这个程序也记不清是什么时候写的了,犹记得那时我还很年轻,偶然从网上看到了这样一个类似的标题(AI五子棋的实现),进去后看到那个是ja
- 1.常用属性Name:名称;BackColor:设置控件背景颜色;Enabled:是否可用;FlayStyle:控件样式;Image:设置控
- 目录如何快速获取 相册分类一些异常情况的处理Recycleview-CursorAdapter还有必要用LoaderManager吗总结如何
- 本文实例为大家分享了Android Studio实现带边框的圆形头像的具体代码,供大家参考,具体内容如下效果显示:(没有边框的)(有边框的)
- Java生成4位、6位随机数短信验证码生成短信验证码问题,本质是产生某个范围内随机数的问题。比如,要生成6位短信验证码xxxxxx:6位数最
- Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建