当前位置:网站首页>MongoDB 的安装和基本操作
MongoDB 的安装和基本操作
2022-07-06 08:47:00 【look-word】
MongoDB 的安装
使用 docker 安装
下载镜像:
docker pull mongo:4.4.8(推荐,下载指定版本)
docker pull mongo:latest (默认下载最新版本)
查看镜像:
docker images
- 可以看到 mongo 已经下载好了
启动镜像:
docker run -d --restart=always -p 27017:27017 --name mymongo -v /data/db:/data/db mongo:4.4.8
- -d 后台运行
- –restart=always docker 容器启动 mongo 也启动 关闭也是如此
- -name 指定容器的名称
- -v 和磁盘的的某个文件绑定起来
进入容器:
docker exec -it mymongo /bin/bash
进入到 mongo 的客户端
mongo
MongoDB 概念解析
不管我们学习什么数据库都应该学习其中的基础概念,在 mongodb 中基本的概念是文档、集合、数据库,下面我们详细介绍,下表将帮助您更容易理解 Mongo 中的一些概念:
SQL 术语/概念 | MongoDB 术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库表/集合 |
row | document | 数据记录行/文档 |
column | field | 数据字段/域 |
index | index | 索引 |
table joins | 表连接,MongoDB 不支持 | |
primary key | primary key | 主键,MongoDB 自动将_id 字段设置为主键 |
MongoDB 常用操作
(1)Help 查看命令提示
db.help();
(2)切换/创建数据库
use test
如果数据库不存在,则创建数据库,否则切换到指定数据库
(3) 查询所有数据库
show dbs;
(4)删除当前使用数据库
db.dropDatabase();
(5)查看当前使用的数据库
db.getName();
(6)显示当前 db 状态
db.stats();
(7)当前 db 版本
db.version();
(8) 查看当前 db 的链接机器地址
db.getMongo();
常用指令:
我们先创建一个数据库
use test
1 INSERT(新增)
插入到 User 集合中
db.User.save({name:‘zhangsan’,age:21,sex:true})
查询 User 集合中的所有文档
db.User.find()
2 Remove(删除)
remove()用于删除单个或全部文档,删除后的文档无法恢复
- 删除所有:db.User.remove({})
- 指定 id 删除:db.User.remove(id)
- 指定条件删除:db.User.remove({‘name’:‘zhangsan’})
3 UPDATE (修改)
- 第一个 { } 是条件
- 第二个大括号 是需要修改的内容
**示例:**db.User.update({name:“lucy”}, {$set:{age:100, sex:0}})
Update()有几个参数需要注意。
db.collection.update(criteria, objNew, upsert, mult)
criteria:需要更新的条件表达式
objNew:更新表达式
upsert:如 FI 标记录不存在,是否插入新文档。
multi:是否更新多个文档。
4 QUERY(查询)
4.1 WHERE
在 mongo 中 我们该如何使用条件查询呢?
**语法 :**db.User.find ({“filed”,值})
示例: db.User.find({name:“张三”})
转换成 sql : select * form User where name = ‘张三’
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-VzK8wRwP-1656833727793)(https://img2022.cnblogs.com/blog/2233272/202207/2233272-20220703110249742-987656105.png)]
4.2 FIELDS
在正常开发中,只需要查询出一个集合中的某几个字段即可?那么这样的业务我们该如何去实现呢?
- 第一个{}表示 什么条件去查询 就是上面的 where
- 第二个{}表示 需要查询出的 field 值为 1
**语法 :**db.User.find ( { } , { “filed” , 值 })
**示例:**db.User.find( { name : “张三” } , { ‘name’ : 1 } )
转换成 sql: select name from User where name = ‘张三’
5 SORT
在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。
**示例:**db.User.find().sort({‘age’:1})
转换的 SQL :select * from User order by age desc
6 截取
在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法表示从第几行开始读取
示例: db.User.find().skip(1).limit(2)
对应的 SQL: select * from User skip 1 limit 2
集合中的所有数据:一共两条
第一行开始读取 读取到第二行结束
7 in(包含)
示例: db.User.find({age:{$in:[21,26,32]}})
**转换的 SQL:**select * from User where age in (21, 26, 32)
8 COUNT(统计行数)
示例: select count(*) from User where age >20
转换的 SQL: db.User.find({age:{$gt:20}}).count()
9 OR ( 或者)
age 是 20 或者 30 都满足条件 类似于 |
示例: select * from User where age = 21 or age = 30
转换的 SQL: db.User.find({$or:[{age:21}, {age:30}]})
10 aggregate(聚合)
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)
插入测试数据
db.article.insert({title: ‘MongoDB Overview’,description: ‘MongoDB is no sql database’,by_user: ‘runoob.com’,url: ‘http://www.runoob.com’,tags: [‘mongodb’, ‘database’, ‘NoSQL’],likes: 100})
db.article.insert({title: ‘NoSQL Overview’,description: ‘No sql database is very fast’,by_user: ‘runoob.com’,url: ‘http://www.runoob.com’,tags: [‘mongodb’, ‘database’, ‘NoSQL’],likes: 10})
db.article.insert({title: ‘Neo4j Overview’,description: ‘Neo4j is no sql database’,by_user: ‘Neo4j’,url: ‘http://www.neo4j.com’,tags: [‘neo4j’, ‘database’, ‘NoSQL’],likes: 750})
常见的聚合表达式
表达式 | 描述 | 示例 |
---|---|---|
$sum | 计算总和 | db.mycol.aggregate([{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { s u m : " sum : " sum:"likes"}}}]) |
$avg | 平均值 | db.mycol.aggregate([{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { a v g : " avg : " avg:"likes"}}}]) |
$min | 获取集合中所有文档对应值得最小值。 | db.mycol.aggregate([{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m i n : " min : " min:"likes"}}}]) |
$max | 获取集合中所有文档对应值得最大值。 | db.mycol.aggregate([{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", num_tutorial : { m a x : " max : " max:"likes"}}}]) |
$push | 在结果文档中插入值到一个数组中。 | db.mycol.aggregate([{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { p u s h : " push: " push:"url"}}}]) |
$addToSet | 在结果文档中插入值到一个数组中,但不创建副本。 | db.mycol.aggregate([{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", url : { a d d T o S e t : " addToSet : " addToSet:"url"}}}]) |
$first | 根据资源文档的排序获取第一个文档数据 | db.mycol.aggregate([{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", first_url : { f i r s t : " first : " first:"url"}}}]) |
$last | 根据资源文档的排序获取最后一个文档数据 | db.mycol.aggregate([{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …roup : {_id : "by_user", last_url : { l a s t : " last : " last:"url"}}}]) |
11 索引
索引通常能够极大的提高
查询的效率
,如果没有索引,MongoDB在读取数据时必须扫描集合中
的每个
文件并选取那些符合查询条件的记录。这种扫描全集合
的查询效率是非常低
的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命
的。索引
是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列
的值进行排序的一种结构。
db.User.createIndex({“name”:1})
语法中 **name****值为你要创建的索引字段,
1** 为指定按升序创建索引,如果你想按降序来创建索引指定为-1即可
边栏推荐
- sublime text的编写程序时的Tab和空格缩进问题
- Marathon envs project environment configuration (strengthen learning and imitate reference actions)
- FairGuard游戏加固:游戏出海热潮下,游戏安全面临新挑战
- The ECU of 21 Audi q5l 45tfsi brushes is upgraded to master special adjustment, and the horsepower is safely and stably increased to 305 horsepower
- 个人电脑好用必备软件(使用过)
- LeetCode:124. 二叉树中的最大路径和
- LeetCode:剑指 Offer 03. 数组中重复的数字
- 电脑F1-F12用途
- visdom可视化实现与检查介绍
- Research Report on Market Research and investment strategy of microcrystalline graphite materials in China (2022 Edition)
猜你喜欢
ESP8266-RTOS物联网开发
Promise 在uniapp的简单使用
Current situation and trend of character animation
生成器参数传入参数
After PCD is converted to ply, it cannot be opened in meshlab, prompting error details: ignored EOF
What is CSRF (Cross Site Request Forgery)?
堆排序详解
Image, CV2 read the conversion and size resize change of numpy array of pictures
Analysis of the source code of cocos2d-x for mobile game security (mobile game reverse and protection)
Esp8266-rtos IOT development
随机推荐
Bitwise logical operator
Research Report on supply and demand and development prospects of China's high purity aluminum market (2022 Edition)
Bottom up - physical layer
sublime text中conda环境中plt.show无法弹出显示图片的问题
Excellent software testers have these abilities
【ROS】usb_ Cam camera calibration
PC easy to use essential software (used)
Target detection - pytorch uses mobilenet series (V1, V2, V3) to build yolov4 target detection platform
pcd转ply后在meshlab无法打开,提示 Error details: Unespected eof
marathon-envs项目环境配置(强化学习模仿参考动作)
被破解毁掉的国产游戏之光
如何有效地进行自动化测试?
Charging interface docking tutorial of enterprise and micro service provider platform
Double pointeur en langage C - - modèle classique
Detailed explanation of heap sorting
按位逻辑运算符
LeetCode:236. 二叉树的最近公共祖先
704 二分查找
角色动画(Character Animation)的现状与趋势
Navicat Premium 创建MySql 创建存储过程