当前位置: 首页 > news >正文

docker安装mongodb及java连接实战

1.docker部署mongodb
docker run --name mongodb -d -p 27017:27017 -v /data/mongodbdata:/data/db -e MONGO_INITDB_ROOT_USERNAME=testmongo -e MONGO_INITDB_ROOT_PASSWORD=test123456 mongodb:4.0.112.项目实战
<dependencies><dependency><groupId>org.mongodb</groupId><artifactId>mongo-java-driver</artifactId><version>3.0.4</version></dependency>
</dependencies>import com.mongodb.MongoClient;
import com.mongodb.client.MongoDatabase;//mongodb 连接数据库工具类
public class MongoDBUtil {//不通过认证获取连接数据库对象public static MongoDatabase getConnect(){//连接到 mongodb 服务MongoClient mongoClient = new MongoClient("localhost", 27017);//连接到数据库MongoDatabase mongoDatabase = mongoClient.getDatabase("test");//返回连接数据库对象return mongoDatabase;}//需要密码认证方式连接public static MongoDatabase getConnect2(){List<ServerAddress> adds = new ArrayList<>();//ServerAddress()两个参数分别为 服务器地址 和 端口ServerAddress serverAddress = new ServerAddress("localhost", 27017);adds.add(serverAddress);List<MongoCredential> credentials = new ArrayList<>();//MongoCredential.createScramSha1Credential()三个参数分别为 用户名 数据库名称 密码MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("username", "databaseName", "password".toCharArray());credentials.add(mongoCredential);//通过连接认证获取MongoDB连接MongoClient mongoClient = new MongoClient(adds, credentials);//连接到数据库MongoDatabase mongoDatabase = mongoClient.getDatabase("test");//返回连接数据库对象return mongoDatabase;}
}//插入一个文档
@Test
public void insertOneTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//要插入的数据Document document = new Document("name","张三").append("sex", "男").append("age", 18);//插入一个文档collection.insertOne(document);
}//插入多个文档
@Test
public void insertManyTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//要插入的数据List<Document> list = new ArrayList<>();for(int i = 1; i <= 3; i++) {Document document = new Document("name", "张三").append("sex", "男").append("age", 18);list.add(document);}//插入多个文档collection.insertMany(list);
}//删除与筛选器匹配的单个文档
@Test
public void deleteOneTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//申明删除条件Bson filter = Filters.eq("age",18);//删除与筛选器匹配的单个文档collection.deleteOne(filter);
}//删除与筛选器匹配的所有文档
@Test
public void deleteManyTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//申明删除条件Bson filter = Filters.eq("age",18);//删除与筛选器匹配的所有文档collection.deleteMany(filter);
}//修改单个文档
@Test
public void updateOneTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//修改过滤器Bson filter = Filters.eq("name", "张三");//指定修改的更新文档Document document = new Document("$set", new Document("age", 100));//修改单个文档collection.updateOne(filter, document);
}//修改多个文档
@Test
public void updateManyTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//修改过滤器Bson filter = Filters.eq("name", "张三");//指定修改的更新文档Document document = new Document("$set", new Document("age", 100));//修改多个文档collection.updateMany(filter, document);
}//查找集合中的所有文档
@Test
public void findTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//查找集合中的所有文档FindIterable findIterable = collection.find();MongoCursor cursor = findIterable.iterator();while (cursor.hasNext()) {System.out.println(cursor.next());}
}//指定查询过滤器查询
@Test
public void FilterfindTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//指定查询过滤器Bson filter = Filters.eq("name", "张三");//指定查询过滤器查询FindIterable findIterable = collection.find(filter);MongoCursor cursor = findIterable.iterator();while (cursor.hasNext()) {System.out.println(cursor.next());}
}//取出查询到的第一个文档
@Test
public void findTest(){//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");//查找集合中的所有文档FindIterable findIterable = collection.find();//取出查询到的第一个文档Document document = (Document) findIterable.first();//打印输出System.out.println(document);
}import com.mongodb.client.FindIterable;
import org.bson.Document;
import java.util.List;
import java.util.ArrayList;public class MongoDBPagingExample {public static void main(String[] args) {// 连接到MongoDB(同上)MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017");MongoDatabase database = mongoClient.getDatabase("yourDatabaseName");MongoCollection<Document> collection = database.getCollection("yourCollectionName");//或者//获取数据库连接对象MongoDatabase mongoDatabase = MongoDBUtil.getConnect();//获取集合MongoCollection<Document> collection = mongoDatabase.getCollection("user");// 分页参数int pageNumber = 1; // 页码,从1开始int pageSize = 10;  // 每页大小int skipCount = (pageNumber - 1) * pageSize; // 计算需要跳过的文档数// 执行分页查询FindIterable<Document> findIterable = collection.find().skip(skipCount).limit(pageSize);List<Document> documents = new ArrayList<>();findIterable.forEach(documents::add); // 将结果添加到列表中// 输出结果documents.forEach(doc -> System.out.println(doc.toJson()));}
}

java获取MongoDB数据库的名称、表名和字段名及相关信息

import com.mongodb.client.*;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import org.bson.BsonDocument;
import org.bson.BsonValue;
import org.bson.Document;import java.util.Map;
import java.util.Objects;public class MongodbDemo {// 1.获取MongoClient客户端public static MongoClient getMongoClient(String url) {MongoClientURI mongoClientURI = new MongoClientURI(url);MongoClient mongoClient = new MongoClient(mongoClientURI);return mongoClient;}// 2.获取数据库列表public static ListDatabasesIterable<Document> getDataBases(String url) {MongoClient mongoClient = getMongoClient(url);ListDatabasesIterable<Document> listDatabasesIterable = mongoClient.listDatabases();for (Document database: listDatabasesIterable) {System.out.println("DataBase : " + database.get("name"));}close(mongoClient);return listDatabasesIterable;}// 3.获取数据库中的集合public static void getCollectionNames(String url) {ListDatabasesIterable<Document> listDatabasesIterable = getDataBases(url);MongoClient mongoClient = getMongoClient(url);for (Document database: listDatabasesIterable) {String databaseName = String.valueOf(database.get("name"));// 跳过系统相关表if ("admin".equals(databaseName)|| "config".equals(databaseName)|| "local".equals(databaseName)) {continue;}MongoDatabase mongoDatabase = mongoClient.getDatabase(databaseName);MongoIterable<String> collectionNames = mongoDatabase.listCollectionNames();System.out.println("DataBase : " + databaseName);for (String collectionName: collectionNames) {System.out.println(" CollectionName : " + collectionName);getField(mongoDatabase, collectionName);getDocument(mongoDatabase, collectionName);}}close(mongoClient);}// 4.获取集合中的字段及格式public static void getField(MongoDatabase mongoDatabase, String collectionName) {Document doc = mongoDatabase.getCollection(collectionName).find().first();System.out.println("Collection : " + collectionName);if (Objects.nonNull(doc)) {BsonDocument document = BsonDocument.parse(doc.toJson());for(Map.Entry<String, BsonValue> entry : document.entrySet()){BsonValue value = entry.getValue();String type = value.getBsonType().name();System.out.println("Column : " + entry.getKey() + " ==== ColumnType : " + type);}}}// 5.获取集合中的数据public static void getDocument(MongoDatabase mongoDatabase, String collectionName) {MongoCollection<Document> collection =  mongoDatabase.getCollection(collectionName);// 查询限制50条FindIterable<Document> findIterable = collection.find().limit(50);System.out.println("CollectionName : " + collectionName);for (Document document : findIterable) {System.out.println(document);}}// 6.关闭客户端连接public static void close(MongoClient mongoClient) {if (Objects.nonNull(mongoClient)) {mongoClient.close();}}// 测试public static void main(String[] args) {String path = "mongodb://127.0.0.1:27017";MongoClient client = getMongoClient(path);ListDatabasesIterable<Document>  listDatabases = getDataBases(path);getCollectionNames(path);getField(client.getDatabase("testdata"), "account");getDocument(client.getDatabase("testdata"), "account");close(client);}
}
//获取链接对象,参数1为url,参数2为端口号
MongoClient mongoclient=new MongoClient("127.0.0.1",27017);
//获取所有库名的迭代器
MongoIterable<String> list= mongoclient.listDatebaseNames();
for(String str:list){System.out.println(str);//查看所有库名
}
//获取链接对象,参数1为url,参数2为端口号
MongoClient mongoclient=new MongoClient("127.0.0.1",27017);
//获取库对象,参数为库名
MongoDatabase db=mongoclient.getDatabase("school");
//获取当前库对象的所有集合名的迭代器
MongoIterable<String> list=db.getlistCollectionNames();
for(String str:list){System.out.println(str);//获取所有集合名
}
//获取集合对象,参数为集合名
MongoCollention<Document> collection=db.getCollection("student");
import com.mongodb.client.MongoClients;
import com.mongodb.client.MongoClient;
import com.mongodb.client.MongoDatabase;
import com.mongodb.client.MongoCollection;
import com.mongodb.client.MongoCursor;
import org.bson.Document;
import org.bson.codecs.configuration.CodecRegistries;
import org.bson.codecs.configuration.CodecRegistry;import java.util.HashSet;
import java.util.Set;public class MongoDBFieldRetriever {public static void main(String[] args) {// MongoDB连接字符串String connectionString = "mongodb://localhost:27017";String dbName = "your_database_name";String collectionName = "your_collection_name";// 创建MongoDB客户端try (MongoClient mongoClient = MongoClients.create(connectionString)) {// 选择数据库和集合MongoDatabase database = mongoClient.getDatabase(dbName);MongoCollection<Document> collection = database.getCollection(collectionName);// 获取集合中的第一个文档MongoCursor<Document> cursor = collection.find().iterator();if (cursor.hasNext()) {Document firstDocument = cursor.next();// 获取字段及其类型Set<String> fields = new HashSet<>();for (String key : firstDocument.keySet()) {fields.add(key + " : " + firstDocument.get(key).getClass().getSimpleName());}// 输出结果System.out.println("Fields and their types in the collection:");for (String field : fields) {System.out.println(field);}}}}
}
1.新增数据//获取集合对象
MongoCollection<Document> collection = db.getCollection("student");
//新增时创建一个Docuement对象,以键值对的形式传入内容
Document document = new Document();
document.put("name", "黑蛋");
document.put("age", 9);
document.put("sex", "公");
//添加一条数据,没有返回值
collection.insertOne(document);
//新增多条数据,传入一个document集合
collection.insertMany(null);
2.修改数据//修改条件
Bson eq = Filters.eq("name","黑蛋");
//修改匹配到的第一条
UpdateResult updateOne = collection.updateOne(eq, new Document("$set",new Document("age",20)));
//修改匹配的多条
collection.updateMany(eq, null);
修改的返回值内容
AcknowledgedUpdateResult{matchedCount=0, modifiedCount=0, upsertedId=null}
matchedCount:代表匹配到的文档数modifiedCount:代表被修改的文档数upsertedId:代表修改的文档id(主键)3.数据删除//条件
Bson eq = Filters.eq("name","黑蛋");
//删除一条符合的
DeleteResult deleteOne = collection.deleteOne(eq);
//删除 所有符合条件的
DeleteResult deleteMany = collection.deleteMany(eq);
删除的返回值内容
AcknowledgedDeleteResult{deletedCount=0}
deletedCount:被删除的文档数4.查询数据//无条件全查
FindIterable<Document> find = collection.find();
//带条件查询
Bson eq = Filters.regex("name", "蛋");
FindIterable<Document> find = collection.find(eq);
查询的结果集映射这种解析方式我们必须知道文档中的各个字段名//全查
FindIterable<Document> find = collection.find();//创建一个实体类集合准备接收结果
List<Student>  slist = new ArrayList<Student>();
//获取结果集迭代器对象    
MongoCursor<Document> iterator = find.iterator();while(iterator.hasNext()) {Student s =  new Student();Document next = iterator.next();s.setSname(next.getString("name"));s.setSsex(next.getString("sex"));s.setSid(next.getInteger("sid"));    //将结果添加至实体类集合slist.add(s);}
http://www.xdnf.cn/news/1311787.html

相关文章:

  • Effective C++ 条款45:运用成员函数模板接受所有兼容类型
  • Linux怎么查看服务器开放和启用的端口
  • 【原理】C# 字段、属性对比及其底层实现
  • illustrator插件大全 免费插件介绍 Ai设计插件集合 (3)
  • Python语言一键整理xhs评论 基于github的开源项目 MediaCrawler
  • Linux进程概念(四)环境地址变量
  • 同创物流学习记录2·电车
  • 链式二叉树的基本操作——遍历
  • 实时计算 记录
  • 美国服务器环境下Windows容器工作负载基于指标的自动扩缩
  • 从盲区到全域:黎阳之光视频孪生+AI智能算法驱动智慧机场三维感知革命
  • 4.6 Vue 3 中的模板引用 (Template Refs)
  • CSS复习
  • Jenkins安装部署(Win11)和常见配置镜像加速
  • SysTick寄存器(嘀嗒定时器实现延时)
  • 要导入StandardScaler类进行数据标准化,请使用以下语句:
  • VS Code配置MinGW64编译ALGLIB库
  • 《C语言程序设计》笔记p10
  • 【数据分享】上市公司供应链成本分摊数据(2007-2024)
  • 【数据结构】-2- 泛型
  • leetcodehot100 矩阵置零
  • 基于Spring Boot 4s店车辆管理系统 租车管理系统 停车位管理系统 智慧车辆管理系统
  • 谷歌手机刷机和面具ROOT保姆级别教程
  • 利用 Java 爬虫按图搜索淘宝商品(拍立淘)实战指南
  • 《解耦的艺术:Python 观察者模式在 GUI 与事件驱动中的实战》
  • cPanel Python 应用部署流程
  • 【自动化运维神器Ansible】Ansible逻辑运算符详解:构建复杂条件判断的核心工具
  • Scala面试题及详细答案100道(11-20)-- 函数式编程基础
  • PCIE EP 框架
  • C#单元测试(xUnit + Moq + coverlet.collector)