当前位置: 首页 > 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.dtcms.com/a/335217.html

相关文章:

  • 视频理解综述
  • 【异步】js中异步的实现方式 async await /Promise / Generator
  • 码上爬第十一题【协程+wasm】
  • 博弈论07——Lemke-Howson 算法
  • STM32-GPIO实践部分1-跑马灯实验
  • 【Java基础面试题】Java基础概念
  • 按键及消抖
  • C++ 最短路Dijkstra
  • [Python]PTA:for 求奇数分之一序列前N项和
  • 安卓开发选择题
  • CUDA 编程笔记:CUDA延迟隐藏
  • 通配符 重定向 管道符
  • Java 中重载与重写的全面解析(更新版)
  • 在浏览器端使用 xml2js 遇到的报错及解决方法
  • BM25算法和传统的TF-IDF算法的区别
  • 改进版的QGIS 的(属性查询) identify featrues 功能
  • 算法题Day2
  • 计组-间接寻址
  • 抽象代数 · 代数结构 | 群、环、域、向量空间
  • 【QT】常⽤控件详解(八) Qt窗⼝ 菜单栏 工具栏 状态栏 浮动窗口 五种内置对话框
  • Oracle数据库文件管理与空间问题解决指南
  • Java中 23 种设计模式介绍,附带示例
  • IO流-打印流
  • leetcode hot100数组:缺失的第一个正数
  • 洛谷B3924 [GESP202312 二级] 小杨的H字矩阵
  • 洛谷B3865 [GESP202309 二级] 小杨的 X 字矩阵(举一反三)
  • CSDN部分内容改为视频转到B站-清单
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘opencv-python’问题
  • Cloudflare Tunnel 使用SAAS回源加速配置教程
  • 配置 Docker 镜像加速,解决 docker pull 拉取镜像失败、docker search 查询镜像失败等问题