mongodb入门到应用(二)--使用篇

MongoDB的基础语法和使用

本篇内容简介:

​ 一、MongoDB和MySQL 的名词映射

​ 二、MongoDB的基本概念和系统库基本操作

​ 1. 基本概念+简介+系统库

​ 2. MongoDB数据库中几项 dbname.system.* 命令的基本含义

​ 3. MongoDB数据几种常用类型

​ 三、基本使用

​ 1. MongoDB的Shell命令行模式

​ 2. MongoDB跨集合多文档事务操作

​ 3. MongoDB常用的CURD

​ 4.MongoDB集合可选项

​ 5.MongoDB与RDBMS WHERE语句比较

​ 6. 部分操作符说明

​ 7. MongoDB $type 操作符

​ 六、注意项

一、MongoDB和Mysql 的名词映射
RDBMS(关键字/解释) MongoDB(关键字/解释)
数据库(database) 数据库(database)
表格(table) 集合(collection)
行(row) 文档(document)
列(column) 字段(field)
表联合(table joins) 嵌入文档()
索引(index) 索引(index)
主键 主键(MongoDB提供了key为 _id)
Mysqld(服务端入口文件) mongod(服务端入口文件)
二、MongoDB的基本概念和系统库基本操作
1.基本概念+简介+系统库
1. 名词:
	replica set (副本集)
	shard cluster (分片)
	Json 和 Bson 


2.MongoDB简介和注意事项:
	1) 数据库
	1.0) 注意事项:
    	A) MongoDB默认数据库为 "db",数据库存储在/data/mongodb/db (这个在启动mongodb时配置指定,可自选)
		B) MongoDB单个实例可容纳多个独立数据库,每个数据库都有自己的集合和权限
		C) 相关命令
			show dbs;	# 查看所有的数据非空的数据库列表,也可使用: show databases;若数据库test中数据为空,则列表中不显示test
			use local;	# 切换到数据库local
			db;			# 查看当前所在的数据库名
			
	1.1)数据库命名: 不能为空字符; 数据库名种不得含有 空格,.(点),$,\(正斜杠),/(反斜杠),空字符; 且必须全部为小写; 库名长度最多64字节 
	1.2) mongodb的系统保留数据库名(已存在,可直接访问):
		A) admin : 存储"root"权限的用户数据库;添加到这个库的用户自动继承所有数据库的权限;一些特定的服务器端命令只能从这个数据库运行(如:列出所有的数据库/关闭服务器等命令)
		B) local : 这个数据永远不会被复制,用来存储只在本地单台服务器的任意集合
		C) config : 当 Mongo 用于分片设置时, config 数据库在内部使用,用于保存分片的相关信息

	2) 集合(对应 RDB的表table)
	2.0) 集合: 是MongoDB的文档组,类似RDBMS(关系型数据库管理系统)的数据表,集合没有固定结构,即集合可以存入不同格式和类型的数据,但一般存入的数据都有一定的关联性
	2.1) 合法的集合名命名规则 
		A) 集合名不能为空字符
		B) 集合名不能含有 \0(空字符),这个字符表示集合名的结尾
		C) 集合名不能以"system."开头,这是为系统集合保留的前缀
		D) 集合名字不能含有系统保留字符; 特例: 有些驱动程序的确支持在集合名中包含保留字符,因为某些系统生成的集合中包含该字符; 千万不要在集合名中使用$ (除非要访问系统创建的集合)
		
	
	3) 文档(对应 RDB的行记录row)
	3.0) 文档: 是一组键值对(key-value); MongoDB特点(也是和RDB的区别): MongoDB的文档不需要设置相同的字段,并且相同的字段不需要相同的数据类型 ????理解???
	
	3.1) 文档的键值对是有序的
	3.2) 文档中的值不仅可以是在双引号中的字符串,还可以是其他的几种数据类型(甚至可以是整个嵌入的文档)
    3.3) MongoDB区分类型和大小写
	3.4) MongoDB的文档不能有重复的键
	3.5) 文档的键是字符串,键可使用任意UTF-8字符(除少数例外情况外)
	3.6) 文档键的命名规则:
		A) 键不能含有 \0(空字符),这个字符表示键的结尾
		B) . 和 $ 有特别的意义,只能在特定环境下使用,如: 点用于连接数据库和表 db.table, $all , $and 表示逻辑与, $or 表示逻辑或
		C) 以下划线(_)开头的键是保留的(不是严格要求,但强烈建议遵循),如: 主键 _id 
		
	4) capped collections
	4.0) capped collections 是固定大小的集合
	4.1) 特点: 高性能,队列过期特性(按照插入时间的顺序过期),类似RRD(时序数据库)概念
	4.2) 原理: 
		A) 显示创建capped collection,并指定collection大小,单位是字节,collection数据存储空间是提前分配好的;
		B) 文档按照插入顺序存储在collection对应的位置,当更新文档时,为了保证所有文档在磁盘的位置一直不变(从而保证高性能),故每个文档更新后的文档空间大小不能超过更新前的文档大小
		C) capped collection可提高增添数据的效率(因其文档插入顺序确定下一个文档的插入位置,而不是使用索引);例如: MongoDB的操作日志文件 oplog.rs 通过 Capped Collection实现

	4.3) 适合场景:记录日志; 例如: MongoDB的操作日志文件 oplog.rs 通过 Capped Collection实现
	4.4) capped collection相关操作:
		A) 在capped collection 中,可添加新的对象
    	B) 能进行更新,但对象不会存储空间,若增加空间,则更新会失败; 故更新后的内容空间不能超过更新前的内容空间,否则更新失败;
    	C) capped collection 不能删除一个稳定,只能使用drop()删除collection所有的行
    	D) 删除后,必须重新显示创建这个collection
    	F) 32bit机器中,capped collection 最大存储为1e9(即10^9)个字节
   	
   
   	5) 元数据
   	5.0) 数据库的信息存储在集合中,如: dbname.system.*,详情见下列表格
   	5.1) 对于上述系统集合中对象的限制:
   		A) 在{
  {system.indexs}}插入数据,可创建索引;但除索引外,该表信息不可变(drop index命令将自动更新相关信息)??? 更新表信息,还是数据信息????????????? 
   		B) {
  {system.users}}是可修改的
   		C) {
  {system.profile}}是可删除的
   	
   	6) MongoDB的数据类型
   	6.0) 见下列表格
   	6.1) 说明几种重要的数据类型
   		A) ObjectID: 类似唯一主键,可很快的生成和排序,包含12bytes
   			a) 前4个字节表示创建unix时间戳;(格林尼治时间UTC时间,北京时间是UTC+8,即北京时间比UTC晚8个小时)
   			b) 接下来三个字节是机器标识码
   			c) 紧接着两个字节由进程id组成PID
   			d) 最后三个字节是随机数
   		B) 字符串
   			a) BSON字符串都是UTF-8编码
   			
   		C) 时间戳
   			a) BSON 有一个特殊的时间戳类型用于MongoDB内部使用,与普通日期类型不相关,时间戳值是一个64位的值:
   				a.1) 前32位是一个time_t值(与Unix新纪元相差的秒数)
   				a.2) 后32位是在某秒中操作的一个递增的序数
   			b) 单个mongod实例中,时间戳值通常是唯一的; 在复制集中,oplog有一个ts字段,该字段值使用BSON时间戳表示操作时间
   			c) BSON时间戳类型主要用于MongoDB内部使用,大部分情况,可使用BSON日期类型
	   	D) 日期
	   		A) 表示当前距离Unix新纪元(1970年1月1日)的毫秒数;日期类型时有符号的,负数表示1970前的日期
	   		B) 创建时间相关命令
	   			a)类型为object的时间
                    > var mydate1 = new Date()     //格林尼治时间
                    > var mydate2 = ISODate()     //格林尼治时间
                    > mydate1
                    输出: ISODate("2018-03-04T14:58:51.233Z")
                    > typeof mydate1	// mydate1,mydate2输出的都是object类型的时间
                    输出: object
                    
	   			b)类型为string的时间
	   				> var mydateStr = ISODate().toString()
	   				> var mydateStr2 = new Date().toString()
	   				> Date()
	   				输出: Fri Jan 10 2020 20:27:03 GMT+0800 (CST)
	   				> typeof mydateStr	// mydateStr,mydateStr2,Date()输出的都是string类型的时间
	   				输出: string
   	
    **注意: (考虑到mysql的普及,强调一下和关系型数据管理系统RDBMS的对应关系), 格式: mongodb概念(对应mysql概念), db => collection => document 
    MongoDB数据库db(My
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值