欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

Java操作MongoDB数据库的示例代码

程序员文章站 2023-10-28 21:10:34
mongodb-driver是mongo官方推出的java连接mongodb的驱动包,相当于jdbc驱动。环境准备step1:创建工程 , 引入依赖

mongodb-driver是mongo官方推出的java连接mongodb的驱动包,相当于jdbc驱动。

环境准备

step1:创建工程 , 引入依赖

<dependencies>
	<dependency>
		<groupid>org.mongodb</groupid>
		<artifactid>mongodb‐driver</artifactid>
		<version>3.6.3</version>
	</dependency>
</dependencies>

step2:创建测试类

import com.mongodb.*;
import com.mongodb.client.*;
import com.mongodb.client.model.filters;
import org.bson.document;
import org.bson.conversions.bson;
import org.junit.test;
import java.util.arraylist;
import java.util.list;
 
public class mogodbtest {
 
    private static mongoclient mongoclient;
 
    static {
        system.out.println("===============mongodbutil初始化========================");
        mongoclient = new mongoclient("127.0.0.1", 27017);
        // 大多使用mongodb都在安全内网下,但如果将mongodb设为安全验证模式,就需要在客户端提供用户名和密码:
        // boolean auth = db.authenticate(myusername, mypassword);
        mongoclientoptions.builder options = new mongoclientoptions.builder();
        options.cursorfinalizerenabled(true);
        // 自动重连true
        // options.autoconnectretry(true);
        // the maximum auto connect retry time
        // 连接池设置为300个连接,默认为100
        // options.maxautoconnectretrytime(10); 
        options.connectionsperhost(300);
        // 连接超时,推荐>3000毫秒
        options.connecttimeout(30000);
        options.maxwaittime(5000); 
        // 套接字超时时间,0无限制
        options.sockettimeout(0);
        // 线程队列数,如果连接线程排满了队列就会抛出“out of semaphores to get db”错误。
        options.threadsallowedtoblockforconnectionmultiplier(5000);
        options.writeconcern(writeconcern.safe);//
        options.build();
    }
 
    // =================公用用方法=================
    /**
     * 获取db实例 - 指定数据库,若不存在则创建
     */
    public static mongodatabase getdb(string dbname) {
        if (dbname != null && !"".equals(dbname)) {
            mongodatabase database = mongoclient.getdatabase(dbname);
            return database;
        }
        return null;
    }
 
    /**
     * 获取指定数据库下的collection对象
     */
    public static  mongocollection<document> getcollection(string dbname, string collname) {
        if (null == collname || "".equals(collname)) {
            return null;
        }
        if (null == dbname || "".equals(dbname)) {
            return null;
        }
        mongocollection<document> collection = mongoclient
            .getdatabase(dbname)
            .getcollection(collname);
        return collection;
    }
}

1.数据库操作

1.1获取所有数据库

//获取所有数据库
  @test
  public void getalldbnames(){
      mongoiterable<string> dbnames = mongoclient.listdatabasenames();
      for (string s : dbnames) {
          system.out.println(s);
      }
  }

1.2获取指定库的所有集合名

//获取指定库的所有集合名
@test
public void getallcollections(){
    mongoiterable<string> colls = getdb("books").listcollectionnames();
    for (string s : colls) {
        system.out.println(s);
    }
}

1.3.删除数据库

//删除数据库
  @test
  public void dropdb(){
      //连接到数据库
      mongodatabase mongodatabase =  getdb("test");
      mongodatabase.drop();
  }

2.文档操作

2.1插入文档

1.插入单个文档

//插入一个文档
@test
public void insertonetest(){
    //获取集合
    mongocollection<document> collection = getcollection("books","book");
    //要插入的数据
    document document = new document("id",1)
            .append("name", "哈姆雷特")
            .append("price", 67);
    //插入一个文档
    collection.insertone(document);
    system.out.println(document.get("_id"));
}

2.插入多个文档

//插入多个文档
  @test
  public void insertmanytest(){
      //获取集合
      mongocollection<document> collection = getcollection("books","book");
      //要插入的数据
      list<document> list = new arraylist<>();
      for(int i = 1; i <= 15; i++) {
          document document = new document("id",i)
                  .append("name", "book"+i)
                  .append("price", 20+i);
          list.add(document);
      }
      //插入多个文档
      collection.insertmany(list);
  }

2.2查询文档

2.2.1基本查询

1.查询集合所有文档

@test
public void findalltest(){
    //获取集合
    mongocollection<document> collection = getcollection("books","book");
    //查询集合的所有文档
    finditerable finditerable= collection.find();
    mongocursor cursor = finditerable.iterator();
    while (cursor.hasnext()) {
        system.out.println(cursor.next());
    }
}

2.条件查询

@test
  public void findconditiontest(){
      //获取集合
      mongocollection<document> collection = getcollection("books","book");
      //方法1.构建basicdbobject  查询条件 id大于2,小于5
      basicdbobject querycondition=new basicdbobject();
      querycondition.put("id", new basicdbobject("$gt", 2));
      querycondition.put("id", new basicdbobject("$lt", 5));
      //查询集合的所有文  通过price升序排序
      finditerable finditerable= collection.find(querycondition).sort(new basicdbobject("price",1));
 
      //方法2.通过过滤器filters,filters提供了一系列查询条件的静态方法,id大于2小于5,通过id升序排序查询
      //bson filter=filters.and(filters.gt("id", 2),filters.lt("id", 5));
      //finditerable finditerable= collection.find(filter).sort(sorts.orderby(sorts.ascending("id")));
 
      //查询集合的所有文
      mongocursor cursor = finditerable.iterator();
      while (cursor.hasnext()) {
          system.out.println(cursor.next());
      }
  }

2.2.2 投影查询

@test
public void findalltest3(){
    //获取集合
    mongocollection<document> collection = getcollection("books","book");
  //查询id等于1,2,3,4的文档
    bson fileter=filters.in("id",1,2,3,4);
    //查询集合的所有文档
    finditerable finditerable= collection.find(fileter).projection(new basicdbobject("id",1).append("name",1).append("_id",0));
    mongocursor cursor = finditerable.iterator();
    while (cursor.hasnext()) {
        system.out.println(cursor.next());
    }
}

2.3分页查询

2.3.1.统计查询

//集合的文档数统计
    @test
    public void getcounttest() {
        //获取集合
        mongocollection<document> collection = getcollection("books","book");
        //获取集合的文档数
        bson filter = filters.gt("price", 30);
        int count = (int)collection.count(filter);
        system.out.println("价钱大于30的count==:"+count);
    }

2.3.2分页列表查询

//分页查询
@test
public void findbypagetest(){
    //获取集合
    mongocollection<document> collection = getcollection("books","book");
    //分页查询  跳过0条,返回前10条
    finditerable finditerable= collection.find().skip(0).limit(10);
    mongocursor cursor = finditerable.iterator();
    while (cursor.hasnext()) {
        system.out.println(cursor.next());
    }
    system.out.println("----------取出查询到的第一个文档-----------------");
    //取出查询到的第一个文档
    document document = (document) finditerable.first();
    //打印输出
    system.out.println(document);
}

2.4修改文档

//修改文档
  @test
  public void updatetest(){
      //获取集合
      mongocollection<document> collection = getcollection("books","book");
      //修改id=2的文档    通过过滤器filters,filters提供了一系列查询条件的静态方法
      bson filter = filters.eq("id", 2);
      //指定修改的更新文档
      document document = new document("$set", new document("price", 44));
      //修改单个文档
      collection.updateone(filter, document);
      //修改多个文档
    // collection.updatemany(filter, document);
      //修改全部文档
      //collection.updatemany(new basicdbobject(),document);
  }

2.5 删除文档

//删除与筛选器匹配的单个文档
  @test
  public void deleteonetest(){
      //获取集合
      mongocollection<document> collection = getcollection("books","book");
      //申明删除条件
      bson filter = filters.eq("id",3);
      //删除与筛选器匹配的单个文档
      collection.deleteone(filter);
 
      //删除与筛选器匹配的所有文档
     // collection.deletemany(filter);
 
      system.out.println("--------删除所有文档----------");
      //删除所有文档
     // collection.deletemany(new document());
  }

以上就是java操作mongodb的示例代码的详细内容,更多关于java操作mongodb的资料请关注其它相关文章!