当前位置: 首页 > article >正文

深入浅出MongoDB(四)

深入浅出MongoDB(四)

文章目录

    • 深入浅出MongoDB(四)
      • docker安装MongoDB
      • MongoDB主要功能
        • 高性能
        • 查询API
        • 高可用
        • 横向可扩展性
        • 支持多种存储引擎
      • CRUD操作
        • 创建操作
        • 读取操作
        • 更新操作
        • 删除操作
        • 批量写入

docker安装MongoDB

  1. 使用docker查找mongodb镜像
docker search mongodb
  1. 下载需要的mongodb镜像
docker pull mongo:latest
  1. 查看下载的镜像
docker images
  1. 创建外部挂载目录
# 分别创建配置、数据、日志目录
mkdir -p /opt/mongo/config
mkdir -p /opt/mongo/data
mkdir -p /opt/mongo/logs
# 创建配置文件
touch /opt/mongo/config/mongod.conf
# 修改目录的权限
chmod 777 /opt/mongo -R
  1. 修改配置文件mongod.conf内容
# 数据库存储路径
dbpath=/opt/mongo/data
# 日志文件位置
logpath=/opt/mongo/logs/mongod.log
# 监听的端口
port=27017
# 开放IP地址
bind_ip=0.0.0.0
# 启用日志记录
journal=true
# 后台运行
fork=true
# 启用身份验证
auth=true
  1. 启动容器
# -p 宿主机端口:容器端口,-v 宿主机目录:容器具体目录,--restart=always容器退出后总是重新启动
docker run -itd --name mongo -p 27017:27017 \
-v /opt/mongo/config/mongod.conf:/etc/mongod.conf \
-v /opt/mongo/data:/data/db \
-v /opt/mongo/logs:/var/log/mongodb \
-e MONGO_INITDB_ROOT_USERNAME=admin \
-e MONGO_INITDB_ROOT_PASSWORD=123456 \
--restart=always \
mongo
  1. 创建数据库用户
# 进入mongodb容器
docker exec -it mongo /bin/mongo
# 使用admin数据库
use admin
# 完成认证
db.auth("admin", "123456")
# 创建新用户test
db.createUser({
   
	user: "test",
	pwd: "123456",
	roles: [{
   role: "root", db: "admin"}]
})
# 更新用户角色及修改权限
db.updateUser("admin", {
   roles:[{
   role: "readWrite", db: "admin"}]})
# 更新用户密码
db.changeUserPassword("admin", "12345678")
# 删除用户
db.dropUser({
   "admin"})
# 查看所有用户
show users
# 查看当前数据库,默认有admin、local和config
show dbs
  1. 创建数据库和集合
use test
db.createCollection('demo')
  1. 查看数据库版本
> db version()
5.0.5

MongoDB主要功能

高性能
  1. mongodb提供高性能数据持久性。尤其是对嵌入式数据模型的支持减少了数据库系统上的I/O活动。
  2. 索引支持更快的查询,还可以包含嵌入式文档和数组的键。
查询API
  1. mongodb查询API支持读写操作、数据聚合、文本搜索和地理空间查询。
高可用
  1. mongodb的复制工具称为副本集,提供了自动故障转移和数据冗余的功能。
  2. 副本集是一组mongodb服务器,维护相同的数据集,并可以提供冗余和提高数据可用性。
横向可扩展性
  1. 分片将数据分布在机器集群上。
  2. 从3.4开始,支持基于分片键创建数据的区域。在均衡的集群中,mongodb仅将区域覆盖的读写定向到区域内的那些分片。
支持多种存储引擎
  1. WiredTiger存储引擎包括对静态加密技术的支持;
  2. 用于自管理部署的内存存储引擎;
  3. 提供可插拔的存储引擎API,允许第三方基于mongodb开发存储引擎。

CRUD操作

创建操作
  1. 创建或插入操作用于把新文档添加到集合中。如果集合当前不存在,插入操作会创建集合。

  2. 以下方法可以把文档插入到集合中,插入操作针对的是单个集合,所有写入操作在单个文档级别都具有原子性。

  • db.collection.insertOne()
db.createCollection('inventory')
db.inventory.insertOne({
   
    item: 'canvas',
    qty: 100,
    tags: ['cotton'],
    size: {
    h: 28, w: 35.5, uom: 'cm' }
})
db.inventory.find({
   item: 'canvas'})
[
  {
   
    "_id": {
   "$oid": "66fe4d1fadb29602c25483cd"},
    "item": "canvas",
    "qty": 100,
    "size": {
   
      "h": 28,
      "w": 35.5,
      "uom": "cm"
    },
    "tags": ["cotton"]
  }
]
  • db.collection.insertMany()
db.inventory.insertMany([
	{
   
		item: 'mat',
		qty: 24,
		tags: ['blank', 'white'],
		size: {
    h: 15, w: 21, uom: 'cm'}
	},
	{
   
    	item: 'journal',
	    qty: 85,
    	tags: ['gray'],
	    size: {
    h: 27.9, w: 35.5, uom: 'cm' }
  	},
  	{
   
        item: 'mousepad',
        qty: 28,
        tags: ['gel', 'blue'],
        size: {
    h: 19, w: 22.85, uom: 'cm' }
    }
])
读取操作
  1. 读取操作用于从集合中检索文档,以下方法可以用来读取文档,可以指定查询过滤器或条件来识别要返回的文档。
  • db.collection.find()
db.users.find(
	{
   age: {
   $gt: 18}},
	{
   name: "张三"}
).limit(5)
  1. 要选择集合中的所有文档,需要将空的文档作为查询选择器参数传递给find方法。
db.inventory.find()
  1. 指定条件查询
db.inventory.find({
   item:'mat'})
  1. 使用查询操作符指定条件
db.inventory.find({
   qty:{
   $in:[100, 24]}})
  1. 复合查询可以给集合文档中的多个字段指定条件,逻辑与连接词隐式地连接复合查询的子句,以便该查询选择集合中与所有条件匹配的文档。逻辑或可以选择集合中至少匹配一个条件的文档。使用比较运算符的查询受到类型范围的限制。
db.inventory.find({
   item:{
   $in:['canvas', 'mat']}, qty:100})
db.inventory.find({
   $or:[{
   item:{
   $in:['canvas', 'mat']}}, {
   qty:85}]})
db.inven

http://www.kler.cn/news/342627.html

相关文章:

  • 【Ubuntu】在Ubuntu上安装IDEA
  • 【操作系统】——进程(手把手教你学进程,学不会你呼我)
  • 如何实现MySQL异地多活场景
  • 【包教包会】《从零开始训练自己的LLM的最佳指南》中文版免费pdf分享
  • Dolma:包含三万亿Token的语言模型预训练研究开放语料库
  • 《Web3 安全:攻击与防御全景指南》
  • 如何移除 iPhone 上的网络锁?本文筛选了一些适合您的工具
  • Error:WPF项目中使用oxyplot,错误提示命名空间中不存在“Plot”名称
  • 科研绘图系列:R语言绘制SCI文章图2
  • PHP实现OID(Object identifier)的编码和解码
  • RTP H264封包和解包分析
  • 点进HTML初步了解
  • 前后端分离开发YApid
  • 基于SpringBoot民宿预订系统小程序【附源码】
  • java对接GPT 快速入门
  • android studio可用下载地址
  • 找最小无重复子串(java的哈希)
  • 安全性能等级
  • 【rust实战】rust博客系统1_项目技术栈
  • Notepad++ 怎么让行行之间只保留一空行