文章目录
一、数据库
数据库的概念:
程序运行都是在内存中,而内存的特点就是,一旦断电,那么内存中的数据都会丢失。
为了保存我们的数据,我们需要能够把数据持久化到硬盘的工具。
这种用来按照数据结构组织、存储和管理数据的仓库,就是数据库。
数据库分类
关系型数据库
英文名:RDB
例如:mysql , sqlserver , db2 , oracle
特点就是:打开都是表
非关系型数据库
英文名:nosql
mongodb , redis
文档存储
键值对kv存储
二、Mongo
存储的数据类型
文档型的数据存储,结构类似于json,叫做bson
下载
小数位,偶数位为稳定版,例如3.2, 奇数位为开发版, 如3.1
对32位系统并不友好。
三个层次
数据库(包含多个集合)
集合(包含多个文档)
文档(我们操作的东西)
基本指令(shell)
show dbs - 显示当前所有数据
use 数据库名 - 进入指定的数据库 如果没有 也能进入 在插入第一条数据的时候创建改库
db - 展示当前所处的数据库
show collections - 看看当前数据库里有什么集合
小知识:
program files 和 program files(x86) 的区别是:
x86放的是32位的程序 另一个放64位程序
三、Mongo Manager Free
概念
mongodb的图形化管理程序
四、MongoDB JAVA API : MongoDB Driver
代码地址
https://gitee.com/gbss/when-iwasfree
引入依赖
<!-- https://mvnrepository.com/artifact/org.mongodb/mongo-java-driver -->
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.14.1</version>
</dependency>
MongoDB Client
获取客户端实例
@Autowired
private static MongoClient mongoClient;
// mongodb的url地址
private static String mongodbUrl = "mongodb://localhost:27017";
/**
* 初始化实例 获得一个连接
* 此处是单例模式
* 做了悲观锁,防止高并发时获取到多个实例
*
* @return
*/
public synchronized static MongoClient getInstance() {
if (null == mongoClient) {
mongoClient = MongoClients.create(mongodbUrl);
if (null != mongoClient) {
log.info("mongoClient connect success!");
} else {
log.info("mongoClient connect failed!");
}
}
return mongoClient;
}
关闭连接
/**
* 关闭连接
*/
public void close() {
if (null != mongoClient) {
mongoClient.close();
mongoClient = null;
}
}
修改连接的客户端url
/**
* 设置mongodb的url地址
*
* @param mongodbUrl1
*/
public static void setMongodbUrl(String mongodbUrl1) {
mongodbUrl = mongodbUrl1;
}
创建集合collection与获取database
/**
* mongodb的数据结构 database - collection - document
* 创建collection
*
* @param dataBaseName
* @param collectionName
*/
public void createCollection(String dataBaseName, String collectionName) {
getDatabase(dataBaseName).createCollection(collectionName);
}
/**
* 获取database
*
* @param dataBaseName
* @return
*/
public MongoDatabase getDatabase(String dataBaseName) {
return mongoClient.getDatabase(dataBaseName);
}
获取集合
/**
* 获取指定database下所有的集合名
*
* @param dataBaseName
* @return
*/
public List<String> listCollectionNames(String dataBaseName) {
List<String> stringList = new ArrayList<String>();
mongoClient.getDatabase(dataBaseName).listCollectionNames().forEach((Consumer<? super String>) t -> {
stringList.add(t);
});
return stringList;
}
/**
* 获取指定的集合
* @param dataBaseName
* @param collectionName
* @return
*/
public MongoCollection<Document> getCollectionByName(String dataBaseName, String collectionName) {
return getDatabase(dataBaseName).getCollection(collectionName);
}
通过id查询文档
/**
* 通过id(objectid)精确查询
* @param dataBaseName
* @param collectionName
* @param id
* @return
*/
public FindIterable<Document> findMongoDbDocById(String dataBaseName, String collectionName, String id){
BasicDBObject searchDoc = new BasicDBObject().append("_id", id);
return getCollectionByName(dataBaseName,collectionName).find(searchDoc);
}
/**
* 通过id(objectid)模糊查询
* @param dataBaseName
* @param collectionName
* @param id
* @return
*/
public FindIterable<Document> findMongoDbDocByIdRegex(String dataBaseName, String collectionName, String id){
BasicDBObject searchDoc = new BasicDBObject().append("_id", new BasicDBObject("$regex",id));
return getCollectionByName(dataBaseName,collectionName).find(searchDoc);
}
/**
* 通过开始id和结束id 查询(根据objectId范围查询)
* @param dataBaseName
* @param collectionName
* @param startId
* @param endId
* @return
*/
public FindIterable<Document> findMongoDbDocById(String dataBaseName, String collectionName, String startId,String endId){
BasicDBObject searchDoc = new BasicDBObject().append("_id", new BasicDBObject("$gte", startId).append("$lte", endId));
return getCollectionByName(dataBaseName,collectionName).find(searchDoc);
}
/**
* 自己组装检索条件
* @param dataBaseName
* @param collectionName
* @param basicDBObject
* @return
*/
public FindIterable<Document> findMongoDbDoc(String dataBaseName, String collectionName,BasicDBObject basicDBObject){
return getCollectionByName(dataBaseName,collectionName).find(basicDBObject);
}
/**
* 限制查询返回的条数
* @param dataBaseName
* @param collectionName
* @param basicDBObject
* @param limitNum
* @return
*/
public FindIterable<Document> findMongoDbDoc(String dataBaseName, String collectionName,BasicDBObject basicDBObject,Integer limitNum){
return findMongoDbDoc(dataBaseName,collectionName,basicDBObject).limit(limitNum) ;
}
/**
* 通过开始id和结束id查询
* 并限制查询返回的条数
* @param dataBaseName
* @param collectionName
* @param startId
* @param endId
* @param limitNum
* @return
*/
public FindIterable<Document> findMongoDbDocById(String dataBaseName, String collectionName, String startId,String endId,Integer limitNum){
return findMongoDbDocById(dataBaseName,collectionName,startId,endId).limit(limitNum);
}
插入文档
/**
* 插入操作,注意插入时,如果数据已经存在会报错,插入时必须数据不存在,不会自动进行覆盖
* 插入单条记录
* @param dataBaseName
* @param collectionName
* @param document
*/
public void insertDoc(String dataBaseName, String collectionName, Document document){
getCollectionByName(dataBaseName,collectionName).insertOne(document);
}
/**
* 插入多条记录
* @param dataBaseName
* @param collectionName
* @param listData
*/
public void insertDoc(String dataBaseName, String collectionName,List<? extends Document> listData){
getCollectionByName(dataBaseName,collectionName).insertMany(listData);
}
更新文档
/**
* 更新单条文档
* @param dataBaseName
* @param collectionName
* @param var1
* @param var2
*/
public void updateDoc(String dataBaseName, String collectionName, Bson var1, Bson var2){
getCollectionByName(dataBaseName,collectionName).updateOne(var1,var2);
}
/**
* 更新多条文档
* @param dataBaseName
* @param collectionName
* @param var1
* @param list
*/
public void updateDoc(String dataBaseName, String collectionName, Bson var1, List<? extends Bson> list){
getCollectionByName(dataBaseName,collectionName).updateMany(var1,list);
}