前言
本次项目采用mongodb作为数据库存储,本文主要内容分为以下几点:
常用教程:https://www.w3cschool.cn/mongodb/
1、mongo安装,配置,启动,可视化工具Robo
2、mongo 数据备份,导入
3、mongo常用的sql语句
4、java 使用 mongo
5、spring boot 使用 mongo,大数据处理过程:分页查找
一、Mongo安装,配置,启动,可视化工具Robo
1、直接下载mongo安装,
2、进入安装目录bin的同级目录创建 data\db 文件夹
3、进入bin目录,如无就创建 mongodb.conf 文件,输入如下内容
bind_ip=0.0.0.0 # 指定可以接收局域网内所有请求,如果是127.0.0.1 就只能接收本机请求,别的设备进不来
dbpath=C:\MongoDB\Server\3.4\data\db #设置db的存储路径,如果不设置就只能在根目录下面
4、bin目录下,建立startmongo.bat文件,内容如下
mongod --config mongodb.conf
5、直接启动startmongo.bat文件即可启动mongo
6、可视化工具 Robo
PS: 安装可能半路卡住,因为选择了下载UI管理器,网络不通情况下就不行了
参考:https://blog.youkuaiyun.com/sujin_/article/details/79416744
断网启动时,提示缺少dll,安装即可
https://jingyan.baidu.com/article/359911f59731ba57ff030646.html
二、Mongo 数据备份,导入 mongodump , mongorestore
1、整个数据库导入导出
mongo安装目录的bin目录下面 进入cmd,使用 mongodump 即可把当前数据库 dump出来,完成后有一个dump文件夹
同样目录采用mongorestore可以把数据从dump文件夹导入到数据库中
2、导入导出单个表
从远程数据表拉取数据到本地json文件
mongoexport --host 远程服务器IP --port 远程服务器端口 --username 远程数据库用户名 --password 远程数据库密码 --db 数据库名 --collection 数据表名 -q "{_id: ObjectId('')}" --out /home/user/Public/table.json
将本地json文件导入到本地数据库
mongoimport --db 本地数据库名 --collection 本地数据表 --file ~/table.json --type json
三、Mongo常用SQL语句
概念
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB不支持 | |
primary key | primary key | 主键,MongoDB自动将_id字段设置为主键 |
数据类型 | 描述 |
---|---|
String | 字符串。存储数据常用的数据类型。在 MongoDB 中,UTF-8 编码的字符串才是合法的。 |
Integer | 整型数值。用于存储数值。根据你所采用的服务器,可分为 32 位或 64 位。 |
Boolean | 布尔值。用于存储布尔值(真/假)。 |
Double | 双精度浮点值。用于存储浮点值。 |
Min/Max keys | 将一个值与 BSON(二进制的 JSON)元素的最低值和最高值相对比。 |
Arrays | 用于将数组或列表或多个值存储为一个键。 |
Timestamp | 时间戳。记录文档修改或添加的具体时间。 |
Object | 用于内嵌文档。 |
Null | 用于创建空值。 |
Symbol | 符号。该数据类型基本上等同于字符串类型,但不同的是,它一般用于采用特殊符号类型的语言。 |
Date | 日期时间。用 UNIX 时间格式来存储当前日期或时间。你可以指定自己的日期时间:创建 Date 对象,传入年月日信息。 |
Object ID | 对象 ID。用于创建文档的 ID。 |
Binary Data | 二进制数据。用于存储二进制数据。 |
Code | 代码类型。用于在文档中存储 JavaScript 代码。 |
Regular expression | 正则表达式类型。用于存储正则表达式。 |
1、创建数据库,如果不存在就创建,如果存在就切换到目标数据库使用:use DATABASE_NAME
2、查看所有数据库:show dbs
3、切换到指定数据库,再执行,比如 use db1, 再执行下面语句,就会删除,可以通过 show dbs 来验证:db.dropDatabase()
4、删除集合:db.collection.drop()
5、插入文档:MongoDB 使用 insert() 或 save() 方法向集合中插入文档,语法如下:db.COLLECTION_NAME.insert(document)
db.col.insert({title: 'MongoDB 教程'})
6、查询数据:db.col.find()
7、更新:db.collection.update( criteria, objNew, upsert, multi )
db.userdetails.update({"user_id" : "QRSTBWN"},{"user_id" : "QRSTBWN","password" :"NEWPASSWORD" })
8、删除:db.col.remove({'title':'MongoDB 教程'})
9、查询:db.col.find({"by":"w3cschool", "title":"MongoDB 教程"})
查询键 by 值为 w3cschool 或键 title 值为 MongoDB 教程 的文档
db.col.find({$or:[{"by":"w3cschool"},{"title": "MongoDB 教程"}]})
演示了 AND 和 OR 联合使用,类似 SQL 语句为: 'where likes>50 AND (by = 'w3cschool' OR title = 'MongoDB 教程')'
db.col.find({"likes": {$gt:50}, $or: [{"by": "w3cschool"},{"title": "MongoDB 教程"}]})
四、Java使用mongo
1、需要使用 xx - driver.jar
2、存储如下,需要把对象转为json对象,项目使用fastjson
private static MongoClient mongoClient;
private static DB psdoc;
private final static String MONGO_URL = "127.0.0.1:27017";
private final static String DBName = "TestMongo";
mongoClient = new MongoClient(MONGO_URL);
psdoc = mongoClient.getDB(DBName);
DBCollection testBeanData = psdoc.getCollection("testBean");
DBObject testBeanObject = (DBObject)com.mongodb.util.JSON.parse(testBeanStr);
testBeanData.insert(testBeanObject);
五、Spring Boot 使用 mongo
1、prom.xml增加mongo
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency> 。。。
2、定义bean
@Document // 标识被Mongo存储为文档
public class TestBean {
@Id // 标识mongo存储的id
private String id;
private String userName;
。。。。}
3、定义MongoRepository
import java.util.List;
public interface TestBeanRepository extends MongoRepository<TestBean, String> {
List<TestBean> findByUserName(String userName); // 根据userName查找
Page<TestBean> findByUserName(String userName, Pageable pageable); // 分页查找
}
4、在controller文件里面,定义数据库查询变量,定义请求访问,进行分页查询
@RestController
public class TestController {
@Autowired // 注解,直接引用注入的bean
TestBeanRepository testBeanRepository;
@RequestMapping("/testBean")
public TestBean testBean(Model model, String userName, Integer index) {
int size = 1; // 标识1页一个数据
int page = index / size; // 页序号从0开始的
TestBean testBean = new TestBean();
Pageable pageable = new PageRequest(page, size, Sort.Direction.ASC, "_id"); // 分页查询,按照id升序
Page<TestBean> models = testBeanRepository.findByUserName(userName,pageable);
testBean = models.getContent().get(0);
return testBean;
}
}
六、常见错误
1、启动mongo提示有lock锁,要关闭mongo进程,删掉指定路径的lock文件即可