MongoBD 系列(1) —— 初识 MongoDB
初识 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相关推荐
- Mongodb系列:初识Mongodb
一.背景: 月初进行了期末考试很荣幸能够参加到了考试系统维护中(详情请阅读:<那些年我们一起参加的活动:15年上半年考试系统维护总结>)!主要负责服务器维护,在维护期间对Mongodb相逢 ...
- Spring系列之集成MongoDB的2种方法,你知道嘛?
Spring系列之集成MongoDB的2种方法,你知道嘛? MongoDB是最流行的NoSQL数据库,SpringBoot是使用Spring的最佳实践.今天带大家讲一讲SpringBoot集成Mong ...
- mongodb与java结合_MongoDB初探系列之四:MongoDB与Java共舞
MongoDB初探系列之四:MongoDB与Java共舞 来源:互联网 作者:佚名 时间:2015-08-05 08:20 对各位注意到这个帖子的朋友说一声对不起,我不是故意的测试服务器一直没关,一忙 ...
- mongodb 搜索速度_初识 MongoDB 数据库
初识 MongoDB 数据库 前言 Flask 基础框架在之前的三篇文章中写完了.想要学习 web 相关的同学可以自己回顾翻一下,相信看完了,你也可以写出来一个简单的小案例来炫耀一波! 说到 web ...
- 头歌 初识MongoDB
初识MongoDB 第1关:启动 MongoDB 第2关:启动 MongoDB 多实例 第3关:退出客户端和关闭 MongoDB 服务 第1关:启动 MongoDB cd /data mkdir my ...
- 数据仓库系列:初识数仓
数据仓库系列:初识数仓 前言: 本节是数据仓库系列文章的第一篇,本系列的目的在于快速的构建一套最小化可运行的基础数据体系,过程中也会涉及一些数仓的理论知识,但更偏重的是数仓的实现和背后的思考逻辑.所以 ...
- PyTorch源码学习系列 - 1.初识
本系列文章会优先发布于微信公众号和知乎,欢迎大家关注 微信公众号:小飞怪兽屋 知乎: PyTorch源码学习系列 - 1.初识 - 知乎 (zhihu.com) 目录 本系列的目的 PyTorch是什 ...
- python爬虫系列之初识爬虫
python爬虫系列之初识爬虫 前言 我们这里主要是利用requests模块和bs4模块进行简单的爬虫的讲解,让大家可以对爬虫有了初步的认识,我们通过爬几个简单网站,让大家循序渐进的掌握爬虫的基础知识 ...
- 补习系列(17)-springboot mongodb 内嵌数据库
目录 简介 一.使用 flapdoodle.embed.mongo A. 引入依赖 B. 准备测试类 C. 完善配置 D. 启动测试 细节 二.使用Fongo A. 引入框架 B. 准备测试类 C.业 ...
最新文章
- 上一篇的js处理失真数据存在问题换了种方法
- python-语言播报
- python多线程共享全局变量_Python多线程-共享全局变量
- 在.NET Core 中使用 FluentValidation 进行规则验证
- 【Java】《面向对象程序设计——Java语言》Castle代码修改整理
- 好文推荐:深入分析Java线程池的实现原理
- Unity3D 5.x 简单实例 - 发射炮弹
- 软件_手把手教vscode配置c++,python开发环境
- VBS操作XML文档,拷贝结点 (转)
- 坚果云服务器地址,坚果云第三方应用授权WebDAV开启方法
- 如何破解加密相册密码四大方法
- C++/C输出素数,满某个数就换行
- 廊坊金彩教育:店铺装修怎么更吸引客户
- JAVA 获取mac地址
- 爬虫入门——电影top250爬取
- 使用Pandas绘制股票均线
- 2022年,计算机保研er选择计科还是软工?
- sublime教程html5,SublimeText开发html网站教程(一)
- Rocket.chat 安装
- 使用OpenCv中Mat进行水平投影与垂直投影并实现字符切分
热门文章
- Component属性
- 【时间复杂度】你还在担心时间复杂度太高吗?
- 6-1 数据结构实验之排序八:快速排序 (20 分)
- 用python让excel飞起来(第7章 图表操作)
- Google图片搜索创始人朱会灿加盟腾讯搜搜
- 安装win7和Ubuntu双系统后,win7耳机没声音,外放有声音
- 【Linux】一步一步学Linux——Linux系统目录详解(09)
- ZooKeeper Commands: The Four Letter Words
- pfamscan 的使用_使用 HMMER 进行 PFAM 注释
- 微信小程序真机调试功能失常