MongoDB基本使用
- 互联网
- 2025-07-21 18:18:48

MongoDB入门 MongoDB 概念 什么是MongoDB
MongoDB 是在2007年由DoubleClick公司的几位核心成员开发出的一款**分布式文档(数据)**数据库,由C++语言编写。
目的是为了解决数据大量增长的时候系统的可扩展性和敏捷性。MongoDB要比传统的关系型数据库简单很多。
在MongoDB中数据主要的组织结构就是数据库、集合和文档,文档存储在集合当中,集合存储在数据库中。
MongoDB中每一条数据记录就是一个文档,数据结构由键值(key=>value)对组成。
文档类似于 JSON 对象,它的数据结构被叫做BSON(Binary JSON)。
MongoDB中的一些概念:
RDBMSMongoDB数据库数据库表格集合行文档列字段表联合嵌入文档主键_id MongoDB适用场景MongoDB不需要去明确指定一张表的具体结构,对字段的管理非常灵活,有很强的可扩展性。
支持高并发、高可用、高可扩展性,自带数据压缩功能,支持海量数据的高效存储和访问。
支持基本的CRUD、数据聚合、文本搜索和地理空间查询功能。
适用场景:
网站数据:Mongo非常适合实时的插入,更新与查询,并具备网站实时数据存储所需的复制及高度伸缩性。高伸缩性的场景:Mongo非常适合由数十或数百台服务器组成的数据库。大尺寸,低价值的数据:使用传统的关系型数据库存储一些数据时可能会比较昂贵,在此之前,很多时候程序员往往会选择传统的文件进行存储。缓存:由于性能很高,Mongo也适合作为信息基础设施的缓存层。在系统重启之后,由Mongo搭建的持久化缓存层可以避免下层的数据源过载。例如:
弹幕、直播间互动信息、朋友圈信息、物流场景等。
海量数据频繁增删改数据价值不高(没有强事务要求)注意:低版本的MongoDB不支持事务。
安装和启动(docker方式) 拉取镜像 docker pull mongo:7.0.0 创建和启动容器需要在宿主机建立文件夹
rm -rf /opt/mongo
mkdir -p /opt/mongo/data/db
docker run -d --restart=always -p 27017:27017 --name mongo -v /opt/mongo/data/db:/data/db mongo:7.0.0 进入容器 docker exec -it mongo mongo 基本命令 show dbs db.version() #当前db版本 db.getMongo() #查看当前db的连接机器地址 db.help() #帮助 quit() #退出命令行 客户端远程远程连接可以下载客户端:Release Notes — MongoDB Compass
也可以下载Robo 3T | Free, open-source MongoDB GUI (formerly Robomongo)
本文使用第一个。
数据库操作 创建数据库如果数据库不存在,则创建数据库,否则切换到指定数据库。
use userdb 查看当前数据库 db.getName() 显示当前数据库状态 db.stats() 删除当前数据库 db.dropDatabase() 集合操作 创建集合 db.createCollection("User") 删除集合 db.User.drop() 文档操作文档是一组键值(key-value)对
需要注意的是:
1、MongoDB区分类型和大小写。
2、MongoDB的文档不能有重复的键。
insert向User集合插入一条记录。可以预先使用createCollection方法创建集合,也可以不创建集合,直接插入数据,那么集合会被自动创建
db.User.insert({name:'zhangsan',age:21,sex:true}) query查询当前User集合中所有的记录
db.User.find()查询当前User集合中name是zhangsan的记录
db.User.find({name:"zhangsan"}) update只更新匹配到的第一条记录 $set修改器不会将已有字段删除
db.User.update({age:21}, {$set:{name:100}})更新匹配到的所有记录
db.User.update({age:21}, {$set:{age:99}}, {multi: true}) remove移除一个文档
db.User.remove(id)移除所有文档
db.User.remove({}) 索引操作海量数据实现条件高效率查询,全集合扫描性能相对较低,针对于查询字段创建索引(单列索引,复合索引)
查看执行计划
db.集合名称.find({条件}).explain()对频繁查询字段建立索引
db.集合名称.createIndex({字段:1}) #1 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 db.User.createIndex({name:1,age:1})**更多命令参考:** .runoob /mongodb/mongodb-tutorial.html
SpringBoot集成MongoDBspring-data-mongodb提供了MongoTemplate与MongoRepository两种方式访问mongodb,MongoRepository操作简单,MongoTemplate操作灵活,我们在项目中可以灵活使用这两种方式操作mongodb。
集成spring-data-mongodb 搭建项目1、创建项目:mongo_demo
2、导入pom.xml:
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http:// .w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>3.0.5</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>com.example</groupId> <artifactId>mongo_demo</artifactId> <version>0.0.1-SNAPSHOT</version> <properties> <java.version>17</java.version> </properties> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!--mongodb--> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-mongodb</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>3、添加配置文件
application.yml
spring: data: mongodb: database: user host: 192.168.200.6 port: 270174、提供启动类
package com.example.mongo_demo; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; /** * @author: example * @create: 2023-10-30 10:35 */ @SpringBootApplication public class MongoDemoApp { public static void main(String[] args) { SpringApplication.run(MongoDemoApp.class); } } 添加实体 package com.example.mongo_demo.model; import lombok.Data; import org.bson.types.ObjectId; import org.springframework.data.annotation.Id; import org.springframework.data.mongodb.core.mapping.Document; import java.util.Date; @Data @Document("user") //指定mongodb中的集合名字 public class User { @Id private ObjectId id; private String name; private Integer age; private String email; private Date createDate; } MongoRepository 添加Repository类 package com.example.mongo_demo.repository; import com.example.mongo_demo.model.User; import org.bson.types.ObjectId; import org.springframework.data.mongodb.repository.MongoRepository; /** * @author: example * @create: 2023-10-30 10:42 */ public interface UserRepository extends MongoRepository<User, ObjectId> { } 创建测试类test目录创建测试类:MongoRepositoryTest
package com.example.mongo_demo; import com.example.mongo_demo.MongoDemoApp; import com.example.mongo_demo.model.User; import com.example.mongo_demo.repository.UserRepository; import org.bson.types.ObjectId; import org.junit.jupiter.api.Test; import org.junit.platform.engine.discovery.UniqueIdSelector; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.data.domain.*; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import static org.junit.jupiter.api.Assertions.*; @SpringBootTest//(classes = MongoDemoApp.class) class MongoDemoAppTest { @Autowired private UserRepository userRepository; @Test public void testCRUD(){ //新增文档 //User user = new User(); //user.setName("张三"); //user.setAge(21); //user.setEmail("zhangsan@qq "); user.setId(new ObjectId("abc")); //userRepository.save(user); //根据ID查询文档 //ObjectId objectId = new ObjectId("653f195b13a2b265350f36a2"); OptionalJDK提供封装结果容器对象,如果该容器中没有数据报错NoSuchElementException 调用get方法先要判断isPresent()方法 //Optional<User> optional = userRepository.findById(objectId); //if(optional.isPresent()){ // User user = optional.get(); // System.out.println(user); //} //查询列表 //List<User> all = userRepository.findAll(); //System.out.println(all); //条件查询 Example对象 封装文档对应实体类,实体类封装条件 //User user = new User(); //user.setName("赵六"); //Example<User> example = Example.of(user); // //List<User> all = userRepository.findAll(example); //System.out.println(all); //分页查询 //Pageable pageRequest = PageRequest.of(0, 10); //Page<User> page = userRepository.findAll(pageRequest); //List<User> collect = page.get().collect(Collectors.toList()); //System.err.println(collect); // //System.out.println(page.getTotalElements()); //System.out.println(page.getTotalPages()); //Sort sort = Sort.by(Sort.Direction.DESC, "age"); //List<User> all = userRepository.findAll(sort); //System.out.println(all); //User user1 = new User(); //user1.setId(new ObjectId("653f195b13a2b265350f36a1")); //user1.setName("zhaoliu"); //userRepository.save(user1); userRepository.deleteById(new ObjectId("653f195b13a2b265350f36a1")); } } MongoTemplatetest目录创建测试类:MongoTemplateTest
@Autowired private MongoTemplate mongoTemplate; @Test public void testTemplateCURD() { //1.增删改查 //User user = new User(); //user.setName("jack"); //user.setAge(16); //user.setEmail("jack@qq "); //mongoTemplate.save(user); //根据ObjectID查询 //User user1 = mongoTemplate.findById("653f21941be7a2121f30adbf", User.class); //User user1 = mongoTemplate.findById(new ObjectId("653f21941be7a2121f30adbf"), User.class); //System.out.println(user1); //更新 更新条件query 更新内容update //Query query = new Query(); //query.addCriteria(Criteria.where("name").is("jack")); // // //Update update = new Update(); //update.set("age", 55); //mongoTemplate.updateFirst(query, update, User.class); //批量修改 //Query query = new Query(); //query.addCriteria(Criteria.where("age").is(55)); // // //Update update = new Update(); //update.set("age", 65); //mongoTemplate.updateMulti(query, update, "User"); //Query query = new Query(Criteria.where("_id").is(new ObjectId("653f22fae9dd5a67e82c66f0"))); //mongoTemplate.remove(query, "User"); //查询列表 //List<User> all = mongoTemplate.findAll(User.class); //System.out.println(all); //排序 //Query query = new Query(); //query.with(Sort.by(Sort.Direction.ASC, "age")); //List<User> users = mongoTemplate.find(query, User.class); //System.out.println(users); //分页 //Query query = new Query(); //PageRequest(页码,页大小) //query.with(PageRequest.of(1, 1)); //query.skip((pageNum-1)*pageSize),limit(页大小) //query.skip(1).limit(1); //List<User> users = mongoTemplate.find(query, User.class); //System.out.println(users); //模糊查询 String keyword = "os"; Query query = new Query(); //Pattern pattern = Pattern pile("^.*ro.*$", Pattern.CASE_INSENSITIVE); query.addCriteria(Criteria.where("name").regex("^.*"+keyword+".*$")); List<User> users = mongoTemplate.find(query, User.class); System.out.println(users); }MongoDB基本使用由讯客互联互联网栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“MongoDB基本使用”