MongoDB基本使用以及springboot整合MongoDB

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}});
  1. 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;
    }

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

☆叙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值