MongoDB基本使用以及springboot整合MongoDB
创始人
2025-05-31 14:04:58
0

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
org.springframework.bootspring-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;}}

相关内容

热门资讯

AWSECS:访问外部网络时出... 如果您在AWS ECS中部署了应用程序,并且该应用程序需要访问外部网络,但是无法正常访问,可能是因为...
AWSElasticBeans... 在Dockerfile中手动配置nginx反向代理。例如,在Dockerfile中添加以下代码:FR...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...
北信源内网安全管理卸载 北信源内网安全管理是一款网络安全管理软件,主要用于保护内网安全。在日常使用过程中,卸载该软件是一种常...
AWR报告解读 WORKLOAD REPOSITORY PDB report (PDB snapshots) AW...
AWS管理控制台菜单和权限 要在AWS管理控制台中创建菜单和权限,您可以使用AWS Identity and Access Ma...
​ToDesk 远程工具安装及... 目录 前言 ToDesk 优势 ToDesk 下载安装 ToDesk 功能展示 文件传输 设备链接 ...
群晖外网访问终极解决方法:IP... 写在前面的话 受够了群晖的quickconnet的小水管了,急需一个新的解决方法&#x...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
Azure构建流程(Power... 这可能是由于配置错误导致的问题。请检查构建流程任务中的“发布构建制品”步骤,确保正确配置了“Arti...