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

作者:黄河大道东 时间:2023-11-23 04:15:51 

目录
  • 环境准备

  • 1.数据库操作

    • 1.1获取所有数据库

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

    • 1.3.删除数据库

  • 2.文档操作

    • 2.1插入文档

    • 2.2查询文档

    • 2.3分页查询

    • 2.4修改文档

    • 2.5 删除文档

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());
 }

来源:https://www.cnblogs.com/hhddd-1024/p/14686366.html

标签:Java,MongoDB,数据库
0
投稿

猜你喜欢

  • Java Redis Redisson配置教程详解

    2022-10-13 06:32:39
  • 解决SpringBoot跨域的三种方式

    2021-06-20 13:20:08
  • Java 异常的栈轨迹(Stack Trace)详解及实例代码

    2023-12-13 12:19:02
  • Android中BaseActivity自定义标题栏

    2022-04-20 06:47:37
  • 利用Postman和Chrome的开发者功能探究项目(毕业设计项目)

    2021-10-27 10:19:43
  • Java原生HttpClient的使用详解

    2022-06-04 16:29:49
  • Android 应用中插入广告的实例

    2023-02-15 22:41:34
  • Android高级组件Gallery画廊视图使用方法详解

    2023-07-03 14:10:48
  • android图片处理之让图片变成圆形

    2021-08-01 00:29:53
  • Struts2学习笔记(5)-参数传递方法

    2023-08-30 13:03:21
  • C#6.0新语法示例详解

    2023-11-16 03:43:42
  • java获取中文拼音首字母工具类定义与用法实例

    2023-07-14 08:23:55
  • Spring Data JPA查询方式及方法名查询规则介绍

    2022-07-13 19:31:20
  • Android中判断网络连接是否可用及监控网络状态

    2022-09-07 05:24:25
  • 图文详解Java中的字节输入与输出流

    2022-12-23 23:14:48
  • JAVA使用Gson解析json数据实例解析

    2021-08-23 14:50:56
  • SpringBoot使用WebSocket实现前后端交互的操作方法

    2022-07-06 12:34:35
  • 基于Java实现一个简单的单词本Android App的实践

    2023-04-17 21:27:39
  • SpringDataElasticsearch与SpEL表达式实现ES动态索引

    2021-11-27 01:33:03
  • C语言程序设计50例(经典收藏)

    2023-07-10 08:33:19
  • asp之家 软件编程 m.aspxhome.com