热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MongoDB的安装和基本操作

MongoDB的安装使用docker安装下载镜像:dockerpullmongo:4.4.8(推荐,下载指定版本)dockerpullmongo:latest(默认下载最新版本)查

MongoDB 的安装

使用 docker 安装

下载镜像:

  • docker pull mongo:4.4.8(推荐,下载指定版本)

  • docker pull mongo:latest (默认下载最新版本)

img

查看镜像:

docker images

  • 可以看到 mongo 已经下载好了

img

启动镜像:

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

img

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()

img


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}})

img

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

4.2 FIELDS

在正常开发中,只需要查询出一个集合中的某几个字段即可?那么这样的业务我们该如何去实现呢?

  • 第一个{}表示 什么条件去查询 就是上面的 where
  • 第二个{}表示 需要查询出的 field 值为 1

语法 :db.User.find ( { } , { "filed" , 值 })

示例:db.User.find( { name : "张三" } , { 'name' : 1 } )

转换成 sql: select name from User where name = '张三'

img


5 SORT

在 MongoDB 中使用 sort() 方法对数据进行排序,sort() 方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而 -1 是用于降序排列。

示例:db.User.find().sort({'age':1})

转换的 SQL :select * from User order by age desc

img


6 截取

在 MongoDB 中使用 limit()方法来读取指定数量的数据,skip()方法表示从第几行开始读取

示例: db.User.find().skip(1).limit(2)

对应的 SQL: select * from User skip 1 limit 2

集合中的所有数据:一共两条

img

第一行开始读取 读取到第二行结束

img


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()
img


9 OR ( 或者)

age 是 20 或者 30 都满足条件 类似于 |

示例: select * from User where age = 21 or age = 30

转换的 SQL: db.User.find({$or:[{age:21}, {age:30}]})

img

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([{$group : {_id : "$by_user", num_tutorial : {$sum : "$likes"}}}])
$avg 平均值 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$avg : "$likes"}}}])
$min 获取集合中所有文档对应值得最小值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$min : "$likes"}}}])
$max 获取集合中所有文档对应值得最大值。 db.mycol.aggregate([{$group : {_id : "$by_user", num_tutorial : {$max : "$likes"}}}])
$push 在结果文档中插入值到一个数组中。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$push: "$url"}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。 db.mycol.aggregate([{$group : {_id : "$by_user", url : {$addToSet : "$url"}}}])
$first 根据资源文档的排序获取第一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", first_url : {$first : "$url"}}}])
$last 根据资源文档的排序获取最后一个文档数据 db.mycol.aggregate([{$group : {_id : "$by_user", last_url : {$last : "$url"}}}])
11 索引

索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中每个文件并选取那些符合查询条件的记录。这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

db.User.createIndex({"name":1})

语法中 **name****值为你要创建的索引字段,

1** 为指定按升序创建索引,如果你想按降序来创建索引指定为 -1 即可


推荐阅读
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • eclipse学习(第三章:ssh中的Hibernate)——11.Hibernate的缓存(2级缓存,get和load)
    本文介绍了eclipse学习中的第三章内容,主要讲解了ssh中的Hibernate的缓存,包括2级缓存和get方法、load方法的区别。文章还涉及了项目实践和相关知识点的讲解。 ... [详细]
  • JDK源码学习之HashTable(附带面试题)的学习笔记
    本文介绍了JDK源码学习之HashTable(附带面试题)的学习笔记,包括HashTable的定义、数据类型、与HashMap的关系和区别。文章提供了干货,并附带了其他相关主题的学习笔记。 ... [详细]
  • 模板引擎StringTemplate的使用方法和特点
    本文介绍了模板引擎StringTemplate的使用方法和特点,包括强制Model和View的分离、Lazy-Evaluation、Recursive enable等。同时,还介绍了StringTemplate语法中的属性和普通字符的使用方法,并提供了向模板填充属性的示例代码。 ... [详细]
  • 1,关于死锁的理解死锁,我们可以简单的理解为是两个线程同时使用同一资源,两个线程又得不到相应的资源而造成永无相互等待的情况。 2,模拟死锁背景介绍:我们创建一个朋友 ... [详细]
  • 本文介绍了在Vue项目中如何结合Element UI解决连续上传多张图片及图片编辑的问题。作者强调了在编码前要明确需求和所需要的结果,并详细描述了自己的代码实现过程。 ... [详细]
  • 本文介绍了使用哈夫曼树实现文件压缩和解压的方法。首先对数据结构课程设计中的代码进行了分析,包括使用时间调用、常量定义和统计文件中各个字符时相关的结构体。然后讨论了哈夫曼树的实现原理和算法。最后介绍了文件压缩和解压的具体步骤,包括字符统计、构建哈夫曼树、生成编码表、编码和解码过程。通过实例演示了文件压缩和解压的效果。本文的内容对于理解哈夫曼树的实现原理和应用具有一定的参考价值。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了在Linux下安装Perl的步骤,并提供了一个简单的Perl程序示例。同时,还展示了运行该程序的结果。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • Linux环境变量函数getenv、putenv、setenv和unsetenv详解
    本文详细解释了Linux中的环境变量函数getenv、putenv、setenv和unsetenv的用法和功能。通过使用这些函数,可以获取、设置和删除环境变量的值。同时给出了相应的函数原型、参数说明和返回值。通过示例代码演示了如何使用getenv函数获取环境变量的值,并打印出来。 ... [详细]
  • MySQL中的MVVC多版本并发控制机制的应用及实现
    本文介绍了MySQL中MVCC的应用及实现机制。MVCC是一种提高并发性能的技术,通过对事务内读取的内存进行处理,避免写操作堵塞读操作的并发问题。与其他数据库系统的MVCC实现机制不尽相同,MySQL的MVCC是在undolog中实现的。通过undolog可以找回数据的历史版本,提供给用户读取或在回滚时覆盖数据页上的数据。MySQL的大多数事务型存储引擎都实现了MVCC,但各自的实现机制有所不同。 ... [详细]
author-avatar
手机用户2702934510
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有