MongoDB入门级保姆教程

前言

MongoDB是文档数据库,旨在简化开发和扩展,本文主要介绍关键概念和基础语句并提供操作和管理上的注意事项。


1 文档数据库

数据结构,由字段和值对组成的数据结构。类似于json对象。值可以包括其它文档,数组和文档数组。

{
    "userId":9
}

优点:

  • 文档(即对象)对应于许多编程语言中的本机数据类型。
  • 嵌入式文档和数组减少了连接成本
  • 动态模式,支持流畅的多态性

MongoDB将文档存储在集合中。集合类似于关系数据库中的表。
除集合外,MongoDB还支持:

  • 只读视图
  • 按需实例化视图

2 主要功能

高性能:
MongoDB提供高性能的数据持久性,特别是

  • 对嵌入式数据模型的支持减少了数据库系统的I/O操作
  • 索引支持更快的查询,并且可以包括来自嵌入式文档和数组的键

丰富的查询语言:
MongoDB支持丰富的查询语言,以支持读写操作

高可用性:
MongoDB的复制工具(副本集)提供:

  • 故障自动转移
  • 数据冗余
    副本集是一组保持相同的数据集,从而提供冗余和提高数据可用性的MongoDB服务器

水平可伸缩性:
MongoDB提供水平可伸缩性作为其核心功能部分

  • 分片在一组计算机集群分布数据

支持多种存储引擎:

  • WiredTiger存储引擎(包括对静态加密的支持)
  • 内存中存储引擎
  • 此外,MongoDB提供可插拔的存储引擎API,允许第三方为MongoDB开发存储引擎

3 MongoDB Shell

在shell中,db代表数据库,输入db 会显示当前数据库

db

如果还没有创建数据库,会显示test数据库,test数据库是MongoDB的默认数据库
切换数据库命令 use db

use examples

切换数据库之前,不需要提前创建数据库,在第一次存储数据时,如果不存在指定的数据库,MongoDB会自动创建数据库。

MongoDB将数据存储在集合中,集合相当于关系型数据库中的表,如果不存在相应的表,会在第一次写入的时候创建

db.testArray.insertMany(
   { item: "paper", qty: 10, status: "D", size: { h: 8.5, w: 11, uom: "in" }, tags: [ "red", "blank", "plain" ] },
   { item: "planner", qty: 0, status: "D", size: { h: 22.85, w: 30, uom: "cm" }, tags: [ "blank", "red" ] },
   { item: "postcard", qty: 45, status: "A", size: { h: 10, w: 15.25, uom: "cm" }, tags: [ "blue" ] }
);

该操作返回一个确认指示符和一个包含id的成功插入的文档组数的数组。

查询testArray中的所有文档:

db.testArray.find({})

要格式化结果,请追加.pretty() 到find操作:

db.testArray.find({}).pretty()

条件查询:
返回其中statusfield等于的 文档"D"

db.testArray.find( { status: “D” } );

返回其中qtyfield等于的 文档0

db.testArray.find( { qty: 0 } );

其中qtyfield等于 0并且statusfield等于"D"

db.testArray.find( { qty: 0, status: “D” } );

其中uom嵌套在size 文档内的字段等于"in"

db.testArray.find( { “size.uom”: “in” } )

其中size字段等于文档:{ h: 14, w: 21, uom: “cm” }

db.testArray.find( { size: { h: 14, w: 21, uom: “cm” } } )

嵌入式文档上的相等匹配要求完全匹配,包括字段顺序。

其中tags数组包含"red"为其元素之一

db.testArray.find( { tags: “red” } )

如果该tags字段是字符串而不是数组,则查询只是一个相等匹配。

返回该tags字段与指定数组完全匹配的文档,包括顺序

db.testArray.find( { tags: [ “red”, “blank” ] } )

在find中 第二个{} 中可以作为要排除或者要展示那些数据的参数
1 :返回文档中包含该字段
0 : 返回文档中排除该字段
从集合中返回_id item 和 status

db.testArray.find( { }, { item: 1, status: 1 } );

_id字段 即可返回该字段,默认情况下返回。如果想要排除 可以手动排除

db.testArray.find( {}, { _id: 0, item: 1, status: 1 } );

4 视图

MongoDB视图是可查询对象,其内容是其它集合或视图上聚合管道的定义。
MongoDB不会将视图持久化到磁盘上。
客户端查询视图时,将按需计算视图内容。
MongoDB可以要求客户端具有查询视图的权限。
MongoDB不支持针对视图的写入操作。

创建视图
使用db.createCollection()方法或 create命令:

db.createCollection(
  "<viewName>",
  {
    "viewOn" : "<source>",
    "pipeline" : [<pipeline>],
    "collation" : { <collation> }
  }
)

使用db.createView()方法:

db.createView(
  "<viewName>",
  "<source>",
  [<pipeline>],
  {
    "collation" : { <collation> }
  }
)

必须在于源数据相同的数据库里创建视图

视图表现出以下行为:

  1. 只读 视图是只读的;对视图的写操作将出错。
  2. 使用索引和排序操作 ; 视图使用基础集合和索引/索引位于基础集合之上,因此无法在视图上创建, 删除或重建索引,也无法在视图上获取索引列表。
  3. 投影限制;不支持以下投影 运算符:
    • $
    • $elemMatch
    • $slice
    • $meta
  4. 不可变名称;您不能重命名视图
  5. 查看与整理
    • 您可以 在创建时为视图指定默认排序规则。如果未指定排序规则,则视图的默认排序规则是“简单”二进制比较排序规则。也就是说,视图不会继承集合的默认排序规则。
    • 视图上的字符串比较使用视图的默认排序规则。尝试更改或覆盖视图的默认排序规则的操作将失败,并显示错误。
    • 如果从另一个视图创建视图,则不能指定与源视图的排序规则不同的排序规则。
    • 如果执行涉及多个视图的聚合(例如with l o o k u p 或) lookup或) lookup或)graphLookup,则这些视图必须具有相同的排序规则。

若要删除视图,请使用视图上的db.collection.drop()方法。
您可以通过拖放并重新创建视图或使用collMod命令来修改视图。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

黑白极客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值