目录一、mongoDB是什么?1. monGo的体系结构2. mongoDB的特点(或使用场景)3. mongoDB与Mysql、Redis对比4. mongoDB存储原理二、使用Docker安装mongo1.安装2.创
MongoDB是一个NoSQL的非关系型数据库 ,支持海量数据存储,高性能的读写。
与redis对比
1. redis纯内存数据库,内存不足时触发淘汰策略,mongoDB使用内存加磁盘的存储策略具有高扩展性;
2. mongoDB使用Bson存储格式,支持动态字段管理方便扩展;
与mysql对比
1. mongoDB不支持多表操作,不支持事务;
2. mongoDB使用Bson存储格式,支持动态字段管理;
查询效率对比
Redis > MongoDB > MySQL
拉取mongo镜像
docker pull mongo:4.4
创建mongo数据持久化目录
mkdir -p /docker_volume/mongodb/data
运行容器
docker run -itd --name mongo -v /docker_volume/mongodb/data:/data/db -p 27017:27017 mongo:4.4 --auth
-v: 将宿主机的/docker_volume/mongodb/data映射到容器的/data/db目录,将数据持久化到宿主机,以防止删除容器后,容器内的数据丢失
–auth:需要密码才能访问容器服务
登录mongo容器,并进入到【admin】数据库
docker exec -it mongo mongo admin
创建一个用户,mongo 默认没有用户
db.createUser({<!--{C}%3C!%2D%2D%20%2D%2D%3E--> user:'root',pwd:'123456',roles:[ {<!--{C}%3C!%2D%2D%20%2D%2D%3E--> role:'userAdminAnyDatabase', db: 'admin'},'readwriteAnyDatabase']});
【user:‘root’ 】:设置用户名为root
【pwd:‘123456’】:设置密码为123456
【role:‘userAdminAnyDatabase’】:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
【db: ‘admin’】:可操作的数据库
【‘readWriteAnyDatabase’】:赋予用户读写权限
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
连接mongo数据库
db.auth('root', '123456')
测试数据库,插入一条语句
db.user.insert({<!--{C}%3C!%2D%2D%20%2D%2D%3E-->"name":"zhangsan","age":18})
测试数据库,查询刚才插入的语句
db.user.find()
navicat连接测试
导入坐标
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
<version>2.3.9.RELEASE</version>
</dependency>
添加yml配置
spring:
data:
mongodb:
uri: mongodb://192.156.136.168:27017/testdb
username: root
passWord: 123456
编写实体类
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;
@Data
@AllArgsConstructor
@NoArgsConstructor
//指定实体类和数据库文档的映射关系 默认实体类名 数据库如果没有该文档,会自动创建
@Document(value="tb_person")
public class Person {
@Id
private ObjectId id; //mongoDB推荐使用ID
//指定属性名和数据库域的映射关系 默认属性名
@Field("person_name")
private String name;
private int age;
private String address;
}
1.@Document(value=“tb_person”) :指定实体类和数据库文档的映射关系 默认实体类名 数据库如果没有该文档,会自动创建
2. @Field(“person_name”): //指定属性名和数据库域的映射关系 默认属性名
测试类
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.data.domain.Sort;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.data.mongodb.core.query.Criteria;
import org.springframework.data.mongodb.core.query.Query;
import org.springframework.data.mongodb.core.query.Update;
import org.springframework.test.context.junit4.SpringRunner;
@Test
public void find() {
//设置查询条件 age小于30,且person_name="张三"
Criteria criteria = Criteria.where("age").lt(30)
.and("person_name").is("张三");
//设置查询条件
Query query = new Query(criteria);
//查询
List<Person> list = mongoTemplate.find(query, Person.class);
for (Person person : list) {
System.out.println(person);
}
}
@Test
public void findPage() {
//设置查询条件 age小于30,且person_name="张三"
Criteria criteria = Criteria.where("age").lt(30)
.and("person_name").is("张三");
//根据条件 查询总数
Query queryCount = new Query(criteria);
long count = mongoTemplate.count(queryCount, Person.class);
//查询当前页的数据列表, 查询第二页,每页查询2条
Query queryLimit = new Query(criteria)
.with(Sort.by(Sort.Order.desc("age")))
.limit(2)//每页查询条数
.skip(2); //从第几页开始 (page-1)*size
List<Person> list = mongoTemplate.find(queryLimit, Person.class);
for (Person person : list) {
System.out.println(person);
}
}
@Test
public void update() {
//设置查询条件 age小于30,且person_name="张三"
Criteria criteria = Criteria.where("person_name").is("王五");
//设置更新条件
Query query = new Query(criteria);
//设置更新数据
Update update = new Update();
update.set("age", 16);
mongoTemplate.upsert(query, update, Person.class);
}
@Test
public void save() {
Person person = new Person();
person.setName("张三");
person.setAge(18);
mongoTemplate.save(person);
}
@Test
public void dlete() {
mongoTemplate.remove(Query.query(Criteria.where("person_name").is("张三")), Person.class);
}
mongoDB索引
提示:1 :升序索引 -1 :降序索引
#查看索引
db.user.getIndexes()
#创建索引
#db.user.createIndex({'age':1})
新增
db.tb_person.insert({person_name: "陈六", age: 16})
修改
-- 普通修改
db.tb_person.update({age: 16}, {$set: {person_name: "张三"}})
修改格式:db.collection.update(query, update, [ upsert: boolean, multi: boolean, writeConcern: document])
db.tb_person.update({age: 16}, {$set: {person_name: "张三"}}, {upsert: true, multi: true})
-- upsert (默认false ) : 可选,如果不存在update的记录,是否保存。true为保存。
-- multi(默认false ) : 可选,默认只更新第一条记录。true:更新所有匹配数据
-- writeConcern :可选,抛出异常的级别
删除
-- 普通删除
db.tb_person.remove({person_name: "张三"})
删除格式:db.collection.remove(query, update, [ justOne: boolean, writeConcern: document])
db.tb_person.remove({person_name: "张三"}, false)
-- justOne: (可选)true:删除第一个匹配记录,false:删除所有
-- writeConcern :(可选)抛出异常的级别
查询
-- 查询person_name=张三 或者 年龄 18
db.tb_person.find({$or:[{person_name: "张三"},{age:18 }]})
-- 分页查询 以年龄升序排序 跳过第1条数据,查询后面2条数据
db.tb_person.find().sort({age:1}).limit(2).skip(1)
-- 查询年龄小于等于21的数据,以年龄降序排序
db.tb_person.find({age:{$lte:21}}).sort({age:-1})
常用查询条件
中文 | 符号 |
---|---|
小于 | $lt: |
大于 | $gt: |
小于或等于 | $lte: |
大于或等于 | $gte: |
不等于 | $ne: |
到此这篇关于docker安装mongoDB及使用方法的文章就介绍到这了,更多相关docker安装mongoDB内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
--结束END--
本文标题: docker安装mongoDB及使用方法详解
本文链接: https://www.lsjlt.com/news/200030.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
下载Word文档到电脑,方便收藏和打印~
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
2024-05-08
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0