1、介绍
MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情 况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为 WEB 应用提供可扩展的高性能 数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由key-value键值对组成。
2、下载安装
下载地址:mongodb下载

下载zip版
解压,进入bin目录,并将路径复制好

找到我的电脑,右键->属性->高级系统设置->环境变量,找到系统变量中的path

选中,点击编辑,将之前复制的路径填入其中

一直点击确定即可
到此,算安装完成
3、mongodb的一些设置
在安装位置新建data和log文件夹,以及mongo.config文件

在log文件夹中新建mongodb.log文件

使用记事本打开之前新建的mongo.config
输入如下
##database directory
dbpath=data文件路径
##log file
logpath=mongodb.log文件路径
##作者是以下这个,可参考
##database directory
dbpath=D:\mongodb\mongodb-win32-x86_64-windows-5.0.13\data
##log file
logpath=D:\mongodb\mongodb-win32-x86_64-windows-5.0.13\log\mongodb.log
win+r,输入cmd打开命令窗口,输入一下,路径需要改为自己的mongo.config文件路径
mongod --config D:\mongodb\mongodb-win32-x86_64-windows-5.0.13\mongo.config --install --serviceName "MongoDB" --journal
之后输入以下内容启动服务:
net start mongodb
如果提示无法启动服务,可以先执行以下删除服务命令:
sc delete mongodb
之后再按顺序输入上面的两条即可。
验证是否成功:
进入bin目录,shift+鼠标右键,选择在此处打开powershell窗口,在里面输入mongo,出现如下,表示成功了

创建用户和密码:
use test
db.createUser({user: 'root', pwd: '123456', roles: [{role: 'dbAdmin', db: 'test'}]})
创建完后,需要重启服务
4、mongo基本操作
collection(集合):相当于MySQL中的表
创建集合:
//创建集合
db.createCollection("user");
批量插入数据:
//批量插入数据
db.getCollection("user").insert([{
_id: "1",
name: "张三",
"age": 22,
"sex": "男"
}, {
_id: "2",
name: "李四",
"age": 23,
"sex": "男"
}, {
_id: "3",
name: "王五",
"age": 23,
"sex": "女"
}]);
插入单条数据:
//插入单条
db.getCollection("user").insertOne({
_id: "4",
name: "赵六",
"age": 23,
"sex":"男"
});
//插入时间类型
db.user.insertOne({
_id: "9",
name: "喵口十三",
"age": 25,
"sex":"女",
"birthday":ISODate("2000-02-02 10:00:00")
});
查询:
//查询user集合,相当于select * from user
db.user.find();
//去重查询,相当于select distinct(age) from user
db.user.distinct("age");
//查询年龄为23的记录,相当于select * from user where age = 23
db.user.find({"age":23});
//查询年龄大于23的记录,相当于select * from user where age > 23
db.user.find({"age":{$gt:23}});
//查询年龄小于23的记录,相当于select * from user where age < 23
db.user.find({"age":{$lt:23}});
//查询年龄小于等于23的记录,相当于select * from user where age <= 23
db.user.find({"age":{$lte:23}});
//查询年龄大于22小于24的记录,相当于select * from user where age > 23
db.user.find({"age":{$gt:22,$lt:24}});
//查询年龄不等于23的记录,相当于select * from user where age != 23
db.user.find({"age":{$ne:23}});
//模糊查询包含张的记录,相当于select * from user where name like '%张%'
db.user.find({name:/张/});
//模糊查询以三结尾的记录,相当于select * from user where name like '%三'
db.user.find({name:/三$/});
//模糊查询以三开头的记录,相当于select * from user where name like '三%'
db.user.find({name:/^三/});
//查询name和age行,并且age=23的记录,相当于select name,age from user where age = 23
db.user.find({age:23},{name:1,age:1});
//按年龄降序展示,select * from user order by age desc
db.user.find().sort({age:-1});
//按年龄升序展示,select * from user order by age asc
db.user.find().sort({age:1});
//模糊查询包含三的记录并按id降序展示,select * from user where name like '%三%' order by _id desc
db.user.find({name:/三/}).sort({_id:-1});
//只查询五条数据,相当于select * from user limit 5
db.user.find().limit(5);
//查询五条以后的记录
db.user.find().skip(5);
//分页查询数据,每页展示两条,相当于
//select * from user limit 0,2;
//select * from user limit 2,2;
//select * from user limit 4,2
db.user.find().skip(0).limit(2);
db.user.find().skip(2).limit(2);
db.user.find().skip(4).limit(2);
//查询名字为张三年龄为22的记录,相当于select * from user where name = '张三' and age = 22
db.user.find({name:'张三',age:22});
//查询年龄22和年龄25的记录,select * from user where age = 22 or age = 25
db.user.find({$or:[{age:22},{age:25}]});
//查询年龄22和年龄25的记录,select * from user where age in (22,25)
db.user.find({age:{$in:[22,25]}});
//查询年龄22和年龄25的记录的数量,select count(*) from user where age in (22,25)
db.user.find({age:{$in:[22,25]}}).count();
//查询生日大于2010-01-10的记录,相当于select * from user where birthday > '2010-01-10 00:00:00'
db.user.find({birthday:{$gt:ISODate('2010-01-10 00:00:00')}});
//对age字段求和,相当于select sum(age) from user
db.user.aggregate({$group:{_id:null,age:{$sum:"$age"}}});
//对age字段求平均值,相当于select avg(age) from user
db.user.aggregate({$group:{_id:null,age:{$avg:"$age"}}});
//找出年龄为25的记录,并对age字段求和,相当于select sum(age) from user where age = 25
db.user.aggregate({$match:{age:25}},{$group:{_id:null,age:{$sum:"$age"}}});
更新:
//将id为1的记录更名为张update,相当于update user set name = '张update' where id = '1'
db.user.update({_id:'1'}, {$set:{name:'张update'}});
//将年龄为25的记录,年龄加5(只会更改查到的第一条数据)
db.user.update({age:25},{$inc:{age:5}});
//将年龄为25的记录,年龄乘5(只会更改查到的第一条数据)
db.user.update({age:25},{$mul:{age:4}});
//将年龄为25的记录,修改键名,就是将该记录age字段置空,然后新加一个age2字段
db.user.update({age:25},{$rename:{age:'age2'}});
//将age2=25的记录中的age2置空
db.user.update({age2:25},{$unset:{age2:25}});
//查询年龄为30的记录,比较查询的值和给定的值的大小,30>25,则替换30为25
db.user.update({age:30},{$min:{age:25}});
Springboot整合mongodb
application.yaml
spring:
data:
mongodb:
uri: mongodb://root:152162gcp@127.0.0.1:27017/test
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
mongotemplate插入数据会默认新增一列_class,因此需要以下配置防止新增
import org.springframework.context.ApplicationListener;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.convert.DefaultMongoTypeMapper;
import org.springframework.data.mongodb.core.convert.MappingMongoConverter;
import org.springframework.data.mongodb.core.convert.MongoConverter;
import javax.annotation.Resource;
/**
* 监听mongo保存数据
* @author Admin
*/
@Configuration
public class ApplicationReadyListener implements ApplicationListener<ContextRefreshedEvent> {
@Resource
MongoTemplate mongoTemplate;
private static final String TYPEKEY = "_class";
@Override
public void onApplicationEvent(ContextRefreshedEvent contextRefreshedEvent){
MongoConverter converter = mongoTemplate.getConverter();
if(converter.getTypeMapper().isTypeKey(TYPEKEY)){
((MappingMongoConverter) converter).setTypeMapper(new DefaultMongoTypeMapper(null));
}
}
}
User实体类
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.time.LocalDateTime;
/**
* @author Admin
*/
@Data
@Document(collation = "user")//collation指代的是集合,类似与mysql中的表
public class User {
@Id
private String id;
private String name;
private Integer age;
private String sex;
private LocalDateTime birthday;
}
使用mongo
import com.example.mongodb.pojo.User;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
import java.time.LocalDateTime;
/**
* @author Admin
*/
@Service
public class UserService {
@Resource
MongoTemplate mongoTemplate;
public int insertUser(User user){
user.setBirthday(LocalDateTime.now());
mongoTemplate.insert(user);
return 1;
}
}