初识 MongoDB

文章目录

  • 初识 MongoDB
      • 什么是MongoDB?
    • MongoDB 的安装
      • 1. 传统二进制安装
      • 2. Docker 安装
    • MongoDB 的使用
      • 1. MongoDB 结构
      • 2. MongoDB 的使用
        • 数据库相关命令
        • 数据插入相关命令
        • 查找相关命令
        • 更新相关命令
        • 删除相关命令
        • MongoDB 的聚合操作
        • MongoDB 的索引
什么是MongoDB?

Mongodb,分布式文档存储数据库,由C++语言编写,旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种。

MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成。MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档,数组及文档数组。

MongoDB 的安装

1. 传统二进制安装

MongoDB 下载官网https://www.mongodb.com/try/download/community
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JLWvKaxY-1673020606893)(en-resource://database/1991:1)]
选择对应版本下载后通过二进制方式安装

# 解压压缩包
tar -zxf mongodb-linux-x86_64-rhel70-4.4.9.tgz
# 进入解压后的MongoDB 目录
cd mongodb-linux-x86_64-rhel70-4.4.9/
# 将 bin 文件下的可执行文件拷贝到 /usr/local/bin 目录中
cp bin/* /usr/local/bin
# 创建 MongoDB 的数据目录
mkdir /var/lib/mongo
# 创建 MongoDB 的日志目录
mkdir /var/log/mongodb
#--------------------------------------------------------------------------------
# Attention: 创建用户这部分可以省略
# 创建 MongoDB 的用户和用户组,名称均为 mongod
# Ps: 默认情况下创建用户时会创建一个和用户名相同的用户组,也可以提前使用 groupadd mongod 创建用户组
useradd mongod
# 为 mongod 用户设置密码
passwd mongod
# 将数据目录和日志目录都指定给 MongoDB 的用户和用户组
chown -R mongod:mongod /var/lib/mongo
chown -R mongod:mongod /var/log/mongodb
#--------------------------------------------------------------------------------
# 查看 SELinux 是否开启
getenforce
# 如果结果是 Enforcing 则代表 SELinux 已经开启。此时SELinux 会导致 MongoDB用户无法进入 /sys/fs/cgroup 目录。这会导致 MongoDB 无法使用内存
# (不推荐)此时可以使用 setenforce 0 命令关闭 SELinux
# 确保安装了 checkepolicy 模块
yum install checkpolicy
# 创建 MongoDB 的SELinux 自定义策略文件
# ----命令开始-------------------------------------
cat > mongodb_cgroup_memory.te <<EOF
module mongodb_cgroup_memory 1.0;
require {type cgroup_t;type mongod_t;class dir search;class file { getattr open read };
}
#============= mongod_t ==============
allow mongod_t cgroup_t:dir search;
allow mongod_t cgroup_t:file { getattr open read };
EOF
# ----命令结束-------------------------------------
# 通过以下三条命令加载自定义策略
checkmodule -M -m -o mongodb_cgroup_memory.mod mongodb_cgroup_memory.te
semodule_package -o mongodb_cgroup_memory.pp -m mongodb_cgroup_memory.mod
sudo semodule -i mongodb_cgroup_memory.pp
# 配置 MongoDB 在 SELinux 开启的情况下能使 FTDC 获取 netstat 的开启与读取权限。
cat > mongodb_proc_net.te <<EOF
module mongodb_proc_net 1.0;require {type proc_net_t;type mongod_t;class file { open read };
}#============= mongod_t ==============
allow mongod_t proc_net_t:file { open read };
EOF
# 应用 SELinux 的有关 MongoDB 对于 netstat 的配置文件
checkmodule -M -m -o mongodb_proc_net.mod mongodb_proc_net.te
semodule_package -o mongodb_proc_net.pp -m mongodb_proc_net.mod
sudo semodule -i mongodb_proc_net.pp
# 为可以启动 MongoDB 的 Linux 用户授予权限(这里我用 root 代替了)
chown root:root /var/lib/mongo
chown root:root /var/log/mongodb
# 启动 MongoDB
mongod --dbpath /var/lib/mongo --logpath /var/log/mongodb/mongod.log --bind_ip 0.0.0.0 --fork
# 使用本地连接 MongoDB 的 Server
mongo

2. Docker 安装

# 拉取 MongoDB 的镜像
docker pull mongo:4.4.9

MongoDB 的使用

1. MongoDB 结构

database: 数据库
collection: 数据库表/集合
document: 文档
field: 数据字段
index: 索引
primaryKey: 主键

2. MongoDB 的使用

如果没有安装环境可以在官网的网络命令行中进行测试。https://docs.mongodb.com/manual/tutorial/getting-started/

数据库相关命令
#----------- 1. 数据库的相关命令
# 创建名为 test1 的数据库
user test1
# 查看当前所使用的数据库
db
# 查看所有的数据库
show databases
# 查看所有数据库(简略)
show dbs
# 删除数据库
db.dropDatabase()
# 创建名为 Game 的集合
db.createCollection("Game")
# 查看集合中的所有元素
db.getCollection("Game")
# 查看现有集合
show collections
# 删除名为 Game 的集合
db.Game.drop()
数据插入相关命令
# ----------- 2. 数据插入相关命令
# 往 person 集合中插入一条数据
# PS: 如果数据库中没有该集合时,MongoDB 会自动插入一条数据
db.person.insert({"name":"honglong","age":3})
# 往 person 集合中插入一条数据 (需要写入确认)
db.person.insertOne({"name":"WRC7","age":5},{"writeConcern":1})
# 往 person 集合中插入多条数据
#--------------------------------------PS---------------------------------------
# --  _id: 代表的插入对象的主键,主键可以是一个 json 对象,用来作为联合主键。主键对象不可以重复(联合主键需要在主键字段顺序一致的情况下)。
# --  writeConcern: 是写入确认策略,1 代表确认,0 代表无需确认
# --  ordered: 顺序写入
#--------------------------------------------------------------------------------
db.person.insertMany([{"_id": 1,"name": "arma2","age": 7},{"_id": 2,"name": "arma3","age": 4}
],
{"writeConcern": 1,"ordered": true
}
)
# 查看 person 集合中的数据
db.person.find()
# 对以数字开头的集合可以用 getCollection() 方式找到
db.getCollection("person").find()
查找相关命令
# 直接查看集合中的数据
db.getCollection("collection_name").find()
# 按照字段条件进行查找
db.getCollection("collection_name").find({"field":"value"})
# 多条件查询
db.getCollection("collection_name").find({"field1":"value1","field2":"value2"})
# 查找集合中的所有存在该字段的 document
db.getCollection("collection_name").find({"field":{$exists:true}})
# 返回查询后指定的字段,其中 1 代表显示,0 代表不显示,对于非主键字段 0 和 1 不可以混用
db.getCollection("collection_name").find({"field":"value"},{"displayField":1})
# 对查询结果进行美化
db.getCollection("collection_name").find({"field":"value"}).pretty()
# 使用逻辑操作进行查询
db.getCollection("collection_name").find({$or:[{"field1":"value1"},{"field2","value2"}]})
# 指定显示的数据多少
# skip 指跳过之前多少个数
# limit 指输出多少个数
db.getCollection("collection_name").find().skip(1).limit(1)
# 对数量进行统计
# 默认时 count() 一般显示集合中共有多少 document
# 当 count(true) 时才会统计筛选出来的结果数量
db.getCollection("collection_name").find().skip(2).limit(10).count(true)
# 输出排序
# 1 代表时正序,-1 代表的是逆序
db.getCollection("collection_name").find().sort({"field":1})
# 切片

MongoDB 条件查询参照表

条件 示例
不等于 {“a” : { $ne : 1 } }
大于 { “a” : { $gt : 1 } }
小于 { “a” : { $lt : 1 } }
大于等于 { “a” : { $gte : 1 } }
小于等于 { “a” : { $lte : 1 } }
包含 { “a” : { $in : [ “v1” , “v2” ] } }
不包含 { “a” : { $nin : [ “v1” , “v2” ] } }

MongoDB 的逻辑操作符

条件 示例
逻辑非 $not
逻辑与 $and
逻辑或 $or
所有条件均不符合时 $nor
更新相关命令

MongoDB 文档更新的相关操作

  • $set: 给符合条件的文档新增一个字段,有该字段则修改其值
  • $unset: 给符合条件的文档,删除一个字段
  • $push: 增加一个对象到数组底部
  • $pop: 从数组底部删除一个对象
  • $pull: 如果匹配指定的值,从数组中删除相应的对象
  • $pullAll: 如果匹配任意的值,从数据中删除相应的对象
  • $addToSet: 如果不存在则增加一个值到数组

MongoDB 更新的函数

  • db.collection.updateOne(, , )
  • db.collection.updateMany(, , )
  • db.collection.replaceOne(, , )
# 更新文档中的字段
db.getCollection("collection_name").updateOne({condition:"value"},{$set:{"size.com":"new_value"}})
删除相关命令
# 删除集合中的数据
db.collection.remove({"queryCondition":"value"},{"option":"value"})
# 删除集合
db.collection.drop()
MongoDB 的聚合操作

MongoDB 中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。

聚合管道阶段

  • $project 对输入文档进行再次投影
  • $match 对输入文档进行筛选
  • $limit 筛选出管道内前 N 篇文档
  • $skip 跳过管道内前N篇文档
  • $unwind 展开输入文档中的数组字段
  • $sort 对输入文档进行排序
  • $lookup 对输入文档进行查询操作
  • $group 对输入文档进行分组
  • $out 对管道中的文档输出

聚合表达式

  • $ 用 $ 指示字段路径
  • $. 用 $ 和 . 来指示内嵌文档的路径
  • $literal: 指示常量 value
  • $$ 使用 $$ 指示系统变量
  • $$CURRENT 指示管道中当前操作的文档
MongoDB 的索引
# 查看当前集合拥有的索引
db.getCollection("collection_name").getIndexes();
# 查看集合索引的大小
db.getCollection("collection_name").totalIndexSize();
# 创建索引(依据 title 属性创建正向索引,1 代表正向索引,-1 代表逆序索引)
db.getCollection("collection_name").createIndex({"title":1});
# 创建索引并且指定索引名称
db.getCollection("collection_name").createIndex({"title":1},{name:"index_name" });
# 创建多字段索引
db.getCollection("collection_name").createIndex( { orderDate: 1, zipcode: -1 } )
# 创建唯一索引
db.getCollection("collection_name").createIndex({"title":1},{unique:true});# 删除特定索引
db.getCollection("collection_name").dropIndex( { "cat" : -1 } )

MongoBD 系列(1) —— 初识 MongoDB相关推荐

  1. Mongodb系列:初识Mongodb

    一.背景: 月初进行了期末考试很荣幸能够参加到了考试系统维护中(详情请阅读:<那些年我们一起参加的活动:15年上半年考试系统维护总结>)!主要负责服务器维护,在维护期间对Mongodb相逢 ...

  2. Spring系列之集成MongoDB的2种方法,你知道嘛?

    Spring系列之集成MongoDB的2种方法,你知道嘛? MongoDB是最流行的NoSQL数据库,SpringBoot是使用Spring的最佳实践.今天带大家讲一讲SpringBoot集成Mong ...

  3. mongodb与java结合_MongoDB初探系列之四:MongoDB与Java共舞

    MongoDB初探系列之四:MongoDB与Java共舞 来源:互联网 作者:佚名 时间:2015-08-05 08:20 对各位注意到这个帖子的朋友说一声对不起,我不是故意的测试服务器一直没关,一忙 ...

  4. mongodb 搜索速度_初识 MongoDB 数据库

    初识 MongoDB 数据库 前言 Flask 基础框架在之前的三篇文章中写完了.想要学习 web 相关的同学可以自己回顾翻一下,相信看完了,你也可以写出来一个简单的小案例来炫耀一波! 说到 web ...

  5. 头歌 初识MongoDB

    初识MongoDB 第1关:启动 MongoDB 第2关:启动 MongoDB 多实例 第3关:退出客户端和关闭 MongoDB 服务 第1关:启动 MongoDB cd /data mkdir my ...

  6. 数据仓库系列:初识数仓

    数据仓库系列:初识数仓 前言: 本节是数据仓库系列文章的第一篇,本系列的目的在于快速的构建一套最小化可运行的基础数据体系,过程中也会涉及一些数仓的理论知识,但更偏重的是数仓的实现和背后的思考逻辑.所以 ...

  7. PyTorch源码学习系列 - 1.初识

    本系列文章会优先发布于微信公众号和知乎,欢迎大家关注 微信公众号:小飞怪兽屋 知乎: PyTorch源码学习系列 - 1.初识 - 知乎 (zhihu.com) 目录 本系列的目的 PyTorch是什 ...

  8. python爬虫系列之初识爬虫

    python爬虫系列之初识爬虫 前言 我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识 ...

  9. 补习系列(17)-springboot mongodb 内嵌数据库

    目录 简介 一.使用 flapdoodle.embed.mongo A. 引入依赖 B. 准备测试类 C. 完善配置 D. 启动测试 细节 二.使用Fongo A. 引入框架 B. 准备测试类 C.业 ...

最新文章

  1. 上一篇的js处理失真数据存在问题换了种方法
  2. python-语言播报
  3. python多线程共享全局变量_Python多线程-共享全局变量
  4. 在.NET Core 中使用 FluentValidation 进行规则验证
  5. 【Java】《面向对象程序设计——Java语言》Castle代码修改整理
  6. 好文推荐:深入分析Java线程池的实现原理
  7. Unity3D 5.x 简单实例 - 发射炮弹
  8. 软件_手把手教vscode配置c++,python开发环境
  9. VBS操作XML文档,拷贝结点 (转)
  10. 坚果云服务器地址,坚果云第三方应用授权WebDAV开启方法
  11. 如何破解加密相册密码四大方法
  12. C++/C输出素数,满某个数就换行
  13. 廊坊金彩教育:店铺装修怎么更吸引客户
  14. JAVA 获取mac地址
  15. 爬虫入门——电影top250爬取
  16. 使用Pandas绘制股票均线
  17. 2022年,计算机保研er选择计科还是软工?
  18. sublime教程html5,SublimeText开发html网站教程(一)
  19. Rocket.chat 安装
  20. 使用OpenCv中Mat进行水平投影与垂直投影并实现字符切分

热门文章

  1. Component属性
  2. 【时间复杂度】你还在担心时间复杂度太高吗?
  3. 6-1 数据结构实验之排序八:快速排序 (20 分)
  4. 用python让excel飞起来(第7章 图表操作)
  5. Google图片搜索创始人朱会灿加盟腾讯搜搜
  6. 安装win7和Ubuntu双系统后,win7耳机没声音,外放有声音
  7. 【Linux】一步一步学Linux——Linux系统目录详解(09)
  8. ZooKeeper Commands: The Four Letter Words
  9. pfamscan 的使用_使用 HMMER 进行 PFAM 注释
  10. 微信小程序真机调试功能失常