栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java中连接mongodb

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java中连接mongodb

Java中连接mongodb
  1. 创建一个空的Maven工程
  2. 导入MongoDB连接驱动依赖
        
            org.mongodb
            mongo-java-driver
            3.12.7
        
  1. 测试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");
    }
  1. 封装连接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);
    }
}
  1. 创建封装有用户认证的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);
    }
}
  1. 连接池的方式连接数据库
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);
    }
}
  1. 使用认证方式的池连接
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());
        }
    }

分组前的数据过滤
分组后的数据过滤

java操控分页查询

使用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方法比较耗时

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/445333.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号