Mongodb

官网open in new window

MongoDB是一个基于分布式文件存储的开源数据库,由C++语言编写,它提供了一个可扩展的高性能数据存储解决方案。

MongoDB是一个文档型数据库,它的数据是以文档的形式来存储的,文档在MongoDB中是一个非常重要的概念(类似于MySQL中的行),数据库是由一个个的集合组成的

特点
MongoDB并不需要事先创建好数据库和集合,也不需要预先定义好集合中字段的类型和长度,同一个集合中的数据也不需要有相同的结构等等

关系型数据库:MySQL
非关系型数据库:Redis(键值型数据据库),MongoDB(文档型数据库)

对比

MongoDB关系型数据库
数据库(Database)数据库(Database)
集合(Collection)表(Table)
文档(Document)行(Row)
字段(Field)列(Column)
索引 (Index)索引 (Index)
_id主键(Primary Key)
$lookupjoin
$grouparoup bv

应用场景

MongoDB关系型数据库
实时分析数据结构固定
内容管理关系型数据库
非结构化数据结构化数据
物联网多表关联查询
移动Apps传统应用

数据库(Database)
是集合的容器,相当于关系型DB (SQL)中的数据库。

集合(Collection)
数据库中的一组文档,相当于SQL中的表。

文档(Document)
集合中的一条记录,相当于SQL的表中的一行。不同的文档之间不必有相同的结构,这一点是和SQL不同的。

字段(Field)
文档中的键值对,相当于SQL中的列。比较重要的区别是MongoDB中的一个field可以是一个JSON对象或者数组。

安装配置

windows

前往官网下载(社区版下面的CommunityServer).msi安装包,本地安装,安装中会带一个图形化的GUI工具Compass。

包管理器安装

Windows

$ choco install mongodb -y

Linux

# Redhat
sudo yum install -y mongodb-org
# Ubuntu & Debian &SUSE
sudo apt-get update
sudo apt-get install -y mongodb-org
# Fedora
sudo dnf install mongodb-org

Mас

# 安装
brew tap mongodb/brew
brew install mongodb-community
# 启动
brew services start mongodb-community

常用命令

基本命令

  • mongosh打开一个连接到本地实例的MongoShell。所有其他命令都需要再mongosh中执行。
  • show databases show dbs显示当前 MongoDB实例中的所有数据库。
  • use <dbname>切换到数据库<dbname>
  • db显示当前使用中的数据库名称。cls清屏。
  • show collections显示当前数据库中的所有集合。
  • db.dropDatabase()删除当前的数据库。
  • exit退出mongosh会话。

创建/插入

  • insertOne在集合中插入一个新的文档。e.g.db.users.insertOne({name: "老杨"})
  • insertManye在集合中插入多个新的文档。e.g.db.users.insertMany([{name: "李四"}, {name: "王五"}])

删除

  • deleteOne 删除满⾜条件的第⼀个⽂档。
  • deleteMany 删除满⾜条件的所有⽂档。

更新

  • updateOne更新满足条件的第一个文档。
  • updateMany更新满足条件的所有文档。
  • replaceOne替换满足条件的第一个文档。
  • save通过传入的文档替换已有文档或插入一个新的文档。
  • $set只更新文档中$set 指定的字段,不会影响其他字段。
  • $inc用于递增(或递减)文档中指定字段值的操作符。
  • $rename更新某个字段的名称。
  • $unset删除一个字段。
  • $push将值加入一个数组中,不会判断是否有重复的值。
  • $pull将值从一个数组中移除。
  • $addToSet将值加入一个数组中,会判断是否有重复的值,若重复则不加入。

查找

  • find查询所有的文档。e.g.db.users.find()

  • find(<filterObject>)查询所有满足参数对象<filterObject>中指定过滤条件的数据。e.g.db.users.find({name:"老杨"})

  • db.find(<filterObject>,<selectObject>)查询所有满足参数对象<filterObiect>中指定过滤条件的数据,并且只返回<selectObject>中指定的字段。e.g.db.users.find({name: "老杨"},{name: 1, email: 1})

  • findOne 与find 用法相同,找到满足过滤条件的对象,但是只返回第findOne一条。e.g.db.users.findOne({level: 1})

  • countDocuments返回满足条件的记录的数量。

  • sort 使⽤给定的字段按照升序或者降序来排序。

  • limit 限定只返回给定数量的⽂档。

  • skip 从头开始跳过给定数值的⽂档。

过滤条件

  • $eq等于(equal)。
  • $ne不等于(not equal)。
  • $gt / $gte大于(greater than) /大于等于 (greater than or equal to)
  • $it /$ite小于(less than) /小于等于 (less than or equal to)
  • $in值在指定值列表中,就返回该文档。
  • $nin值不等于指定值列表中的任何一个,就返回该文档。
  • $and检查复数条件是否均为真,可以简单理解为“并且”。
  • $or检查复数条件中是否有一个为真,可以简单理解为“或者”。
  • $not将$not里面的过滤条件取反。
  • $exists检查一个字段是否存在。
  • $expr在不同的字段之间做比较。

聚合

  • $sum计算总和。
  • $avg计算平均值。
  • $min获取最小值。
  • $max获取最大值。
  • $push将值加入一个数组中,不会判断是否有重复的值。
  • $first获取第一个文档数据。
  • $last获取最后一个文档数据。

GUI工具

最后更新时间:
贡献者: LAPTOP-CRCIOU48\hjl