- 创建一个空的Maven工程
- 导入MongoDB连接驱动依赖
org.mongodb mongo-java-driver 3.12.7
- 测试java连接MongoDB是否成功
public static void main(String[] args) {
// 创建连接对象
MongoClient client = new MongoClient("192.168.126.129", 27017);
// 获取MongoDB的数据库
MongoDatabase advance = client.getDatabase("advance");
// 获取MongoDB的集合
MongoCollection adv = advance.getCollection("adv");
// 测试连接是否成功
System.out.println("ok");
}
- 封装连接MongoDB的util
public class MongoDBUtil {
private static MongoClient client = null;
static {
if(client==null){
client = new MongoClient("192.168.126.129",27017);
}
}
// 获取MongoDB数据库
public static MongoDatabase getMongoDB(String dbName){
return client.getDatabase(dbName);
}
// 获取数据库的集合
public static MongoCollection getMongoCollection(String dbName,String collection){
MongoDatabase mongoDB = getMongoDB(dbName);
return mongoDB.getCollection(collection);
}
}
- 创建封装有用户认证的mongodb连接
public class MongoDBAuthUtil {
private static MongoClient cline=null;
static {
if(cline==null){
// 封装用户的认证信息createCredential(认证的用户名,创建认证用户所在的数据库,用户密码(char[]类型))
MongoCredential credential = MongoCredential.createCredential("mm1", "advance", "mm1pwd".toCharArray());
// 封装MongoDB的地址与端口
ServerAddress address = new ServerAddress("192.168.126.129", 27017);
cline=new MongoClient(address, Arrays.asList(credential));
}
}
// 获取MongDB数据库
public static MongoDatabase getMongoDB(String dbName){
return cline.getDatabase(dbName);
}
// 获取MongoDB集合
public static MongoCollection getCollection(String dbName,String collName){
MongoDatabase mongoDB = getMongoDB(dbName);
return mongoDB.getCollection(collName);
}
}
- 连接池的方式连接数据库
public class MongDBPoolUtil {
private static MongoClient client=null;
static {
if (client == null){
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.connectionsPerHost(10);//每个地址的最大连接数
builder.connectTimeout(5000);//连接超时时间
builder.socketTimeout(5000);//设置读写操作超时时间
ServerAddress address = new ServerAddress("192.168.126.129", 27017);
//MongoClient(连接地址,连接池参数)
client = new MongoClient(address,builder.build());
//如果是采用集群的模式部署可以使用此种方式来定义
//client = new MongoClient(Arrays.asList(address),builder.build());
}
}
public static MongoDatabase getMongoDB(String dbName){
return client.getDatabase(dbName);
}
public static MongoCollection getCollection(String dbName,String collName){
MongoDatabase mongoDB = getMongoDB(dbName);
return mongoDB.getCollection(collName);
}
}
- 使用认证方式的池连接
public class MongoDBAuthPoolUtil {
private static MongoClient client = null;
static {
if(client == null){
MongoClientOptions.Builder builder = new MongoClientOptions.Builder();
builder.connectionsPerHost(10);//设置连接池最大的连接数
builder.connectTimeout(5000);//连接超时时间
builder.socketTimeout(5000);//设置读写操作时间
MongoCredential credential = MongoCredential.createCredential("mm1", "advance", "mm1pwd".toCharArray());
ServerAddress address = new ServerAddress("192.168.126.129", 27017);
client = new MongoClient(address,credential,builder.build());
}
}
public static MongoDatabase getMongoDB(String dbName){
return client.getDatabase(dbName);
}
public static MongoCollection getColllection(String dbName,String collName){
MongoDatabase mongoDB = getMongoDB(dbName);
return mongoDB.getCollection(collName);
}
}
java操作集合
1.封装创建集合的方法(注:集合不能反复创建,会抛异常)
public static void createCollection(String dbName,String collName){
MongoDatabase mongoDB = getMongoDB(dbName);
mongoDB.createCollection(collName);
}
2.封装获取集合的方法
public static MongoCollection getColllection(String dbName,String collName){
MongoDatabase mongoDB = getMongoDB(dbName);
return mongoDB.getCollection(collName);
}
3.删除集合的方法(注:封装该方法时,传入获取的集合)
public static void deleteCollection(MongoCollection mongoCollection){
mongoCollection.drop();
}
java操作文档
1.添加文档
1.1添加单个文档
- 创建一个advtest集合
public void insertSingledocument(){
// 获取集合
MongoCollection colllection = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
System.out.println(colllection.getNamespace());
// {}--》document对象
// append(String key,Object value)
document document = new document();
document mm1 = document.append("name", "mm2").append("age",4).append("addr", "湖北").append("amount",Arrays.asList(new Integer[] {1,2,3,4}));//注意此处不能是基本数据类型的数组
colllection.insertOne(mm1);
System.out.println("ok");
}
1.2批量添加文档
public void insertManyDecument(){
// 获取集合
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
List decumentLists = new ArrayList<>();
for (int i = 0; i <5 ; i++) {
decumentLists.add(new document().append("name", "mu"+i).append("age",i));
}
advtest.insertMany(decumentLists);
}
2.更新文档
2.1更新单个文档单个键
public void updateSingleDecument(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
advtest.updateOne(Filters.eq("name","mu0"), new document("$set",new document("age",3)));
}
2.2更新单个文档的多个键
public void updateSingleDecumentManyyKey(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
advtest.updateOne(Filters.eq("name","mu0"),new document("$set",new document("age",18).append("gs", "meizu")) );
}
2.3更新多个文档的单个键
public void updateManyDecumentSingleKey(){
MongoCollection advtest = MongoDBAuthUtil.getCollection("advance", "advtest");
advtest.updateMany(Filters.ne("name", null), new document("$set", new document("amount", Arrays.asList(new Integer[]{1,2,3,4}))));
System.out.println("ok");
}
2.4更新多个文档的多个键
public void updateManyDecumentManyKey(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
advtest.updateMany(Filters.ne("name", null),new document("$set", new document("addr","安徽").append("action", "readWriter")));
System.out.println("ok");
}
2.5更新文档中的数组
public void updatedocumentArray(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
advtest.updateMany(Filters.ne("name", null), new document("$push", new document("amount",1)));
System.out.println("ok");
}
查询文档
1.1查询全部文档
public void selectDocumnetAll(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
FindIterable findIterable = advtest.find();
//find()返回的是一个迭代器
MongoCursor iterator = findIterable.iterator();
while(iterator.hasNext()){
document next = iterator.next();
System.out.println(next.get("name")+""+next.get("amount"));
}
}
1.2根据_id查询文档
public void selectdocumentBy_ID(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
FindIterable id = advtest.find(Filters.eq("_id", new ObjectId("6188bd17ea623c1d41727851")));
MongoCursor iterator = id.iterator();
System.out.println(iterator.next());
}
1.3条件查询文档
public void selectdocumentGt(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
FindIterable ages = advtest.find(Filters.and(Filters.gte("age", 3),Filters.eq("name","mm1")));
MongoCursor iterator = ages.iterator();
while (iterator.hasNext()){
document next = iterator.next();
System.out.println(next);
}
}
1.4根据type查询文档
public void selectDecumentType(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
FindIterable findIterable = advtest.find(Filters.type("age", "number"));
MongoCursor iterator = findIterable.iterator();
while(iterator.hasNext()){
document next = iterator.next();
System.out.println(next.get("name"));
}
}
1.5$in的方式来查询文档($nin)
public void selectdocumentIn(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
FindIterable findIterable = advtest.find(Filters.in("name", "mm1", "mm2"));
MongoCursor iterator = findIterable.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
1.6regex的方式来查询文档
public void selectdocumentRegex(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
FindIterable name = advtest.find(Filters.and(Filters.regex("name", Pattern.compile("^m.*1$")),Filters.eq("name","mm1")));
MongoCursor iterator = name.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
1.7带排序文档的查询
public void selectDocumnetSorting(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
FindIterable sort = advtest.find(Filters.regex("name", Pattern.compile("^m"))).sort(new document("name", -1));
MongoCursor iterator = sort.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
java操作日期
1.1插入当前日期
public void insertDate(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
document document = new document();
document.put("name", "mu10");
document.put("date", new Date());
advtest.insertOne(document);
}
1.2插入自定义指定格式日期
public void insertDate() throws ParseException {
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
Date parse = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").parse("2021-1-1 10:10:0");
document document = new document();
document.put("name", "mu10");
document.put("date", parse);
advtest.insertOne(document);
}
java操控聚合函数
1.1聚合函数
public void group(){
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
document sum = new document();
sum.put("$sum", 1);
document count = new document();
count.put("_id", null);
count.put("count", sum);
document group = new document();
group.put("$group", count);
List list = new ArrayList<>();
list.add(group);
AggregateIterable aggregate = advtest.aggregate(list);
MongoCursor iterator = aggregate.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}
}
分组前的数据过滤
分组后的数据过滤
使用skip(跳过多少文档)和limit(取多少文档)方法分页
public void selectdocumentSkipLimit(){
int page=(2-1)*2;
MongoCollection advtest = MongoDBAuthPoolUtil.getColllection("advance", "advtest");
long l = advtest.countdocuments();
System.out.println(l);
FindIterable limit = advtest.find().skip(page).limit(2);
MongoCursor iterator = limit.iterator();
while(iterator.hasNext()){
document next = iterator.next();
System.out.println(next);
}
}
skip方法比较耗时



