MongoDB 是由 C++语言编写的,是一个基于分布式文件存储的开源数据库系统。在高负载的情 况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为 WEB 应用提供可扩展的高性能 数据存储解决方案。 MongoDB 将数据存储为一个文档,数据结构由key-value键值对组成。
下载地址:mongodb下载
下载zip版
解压,进入bin目录,并将路径复制好
找到我的电脑,右键->属性->高级系统设置->环境变量,找到系统变量中的path
选中,点击编辑,将之前复制的路径填入其中
一直点击确定即可
到此,算安装完成
在安装位置新建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'}]})
创建完后,需要重启服务
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}});
application.yaml
spring:data:mongodb:uri: mongodb://root:152162gcp@127.0.0.1:27017/test
org.springframework.boot spring-boot-starter-data-mongodb
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 {@ResourceMongoTemplate mongoTemplate;private static final String TYPEKEY = "_class";@Overridepublic 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 {@Idprivate 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 {@ResourceMongoTemplate mongoTemplate;public int insertUser(User user){user.setBirthday(LocalDateTime.now());mongoTemplate.insert(user);return 1;}}