吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1254|回复: 5
收起左侧

[学习记录] MongoDB入门级保姆教程

  [复制链接]
黑白客 发表于 2023-2-3 11:31

前言

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()方法:

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

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

视图表现出以下行为:

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

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

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

King1993 发表于 2023-2-3 12:23
很适合新手,学习了,还是一个沙发 棒棒哒
engineerlzk 发表于 2023-2-3 13:25
野男人 发表于 2023-2-3 13:53
Paulwalkera 发表于 2023-2-3 14:34
边学边忘的东西 先收藏一下
ytfrdfiw 发表于 2023-2-3 14:41
感谢分享。学习一下。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-25 03:07

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表