当前位置: 移动技术网 > IT编程>数据库>Mysql > MongoDB高级部分

MongoDB高级部分

2020年07月14日  | 移动技术网IT编程  | 我要评论
1.关联关系
	嵌入式关系建模
	引用式关系
2.数据库引用
	DBRefs(自动参考)
	手动参考
	
3.覆盖查询(是一个查询,本质上就是直接从索引中取出数据,不会对文档进行扫描)
	1)查询中的所有字段都是索引的一部分
	2)查询中返回的所有字段都在同一索引中
	
	覆盖索引的示例:
	1)创建复合索引
	db.users.ensureIndex({gender:1,user_name:1})
	2)覆盖索引示例
	db.users.find({gender:"M"},{user_name:1,_id:0})
	
	如果_id不排除,那么此次查询将不能被创建的复合索引覆盖,也就是说此次查询,走的是文档
	
	无法覆盖索引的情况:
	1)任何索引的字段是一个数组
	2)任何索引的字段是一个子文档

4. 分析查询
	1)使用$explain操作符:提供有关查询的信息,查询中使用的索引和其他统计信息,在分析索引优化的情况下非常有用
	db.user.find({gender:"M"},{user_name:1,_id:0}).explain()
	2)使用$hint操作符:强制查询优化器使用指定的索引来运行查询。当测试不同索引的查询的性能的时候,就显得特别有用了。
	db.user.find({gender:"M"},{user_name:1,_id:0}).hint({gender:1,user_name:1}).explain()

5. 原子操作(MongoDB不支持多文档原子事务,但是它可以为单个文档提供了原子操作。
	1)维持原子性的推荐方法是将所有相关信息保存在一起,并使用嵌入式文档在一个文档中一起更新。这将确保单个文档的所有更新都是原子的。(findAndModify的使用)
	
6.高级索引
	1)索引数组字段
	在数组上创建一个索引依次为每个字段创建单独的索引条目。
	创建索引:db.user.ensureIndex({"tags":1})
	验证是否使用正确的索引:db.user.find({tags:"cricket"}).explain()
	2)索引子文档字段(在子文档的所有字段上创建一个索引)
	创建索引:db.user.ensureIndex({"address.city":1,"address.state":1,"address.pincode":1})
	查询表达式必须遵循的索引的顺序:db.user.find({"address.city":"Haikou","address.province":"Hainan"})

7.索引限制
	1)索引额外开销
		每个索引占用一些空间,并导致每次插入、更新和删除的开销。因此,如果很少使用集合进行读取操作(大部分是插入或更新操作),则建议不要使用索引。
	2)RAM、内存的使用
		由于索引存储在RAM中,因此应确保索引的总大小不超过RAM限制。 如果总大小超过了系统内存的大小,MongoDB将开始删除一些索引,从而导致性能下降。
	3)查询限制
		索引不能在使用的查询中使用
			正则表达式或否定运算符,如$nin,$not等
			算术运算符,如$mod等
			$where子句
	4)索引键限制
		从MongoDB2.6版本开始,如果现有索引字段的值超过索引键限制,MongoDB将不会创建索引。
	5)插入超过索引键限制的文档
		如果本文档的索引字段值超过索引键限制,MongoDB将不会将任何文档插入索引集合。mongorestore和mongoimport工具也是如此。
	6)索引的最大范围
		集合不能超过64个索引
		索引名的长度不能超过125个字符
		复合索引最多可以编号31个字段
		
8.ObjectId
	ObjectId 是具有以下结构的12字节BSON类型
		前4个字节表示从unix纪元开始的秒数
		接下来的3个字节是机器标识符
		接下来的2个字节由进程ID组成
		最后3个字节是随机计数器值

	MongoDB使用ObjectIds作为每个文档的_id字段的默认值,这是在创建任何文档时生成的。ObjectId的复杂组合使得所有_id字段都是唯一的。
	
	创建文档的时间戳(因为ObjectId默认存储4字节的时间戳,大多情况下,不再需要额外存储文档的创建时间,可以使用getTimestamp获取文档的创建时间)
	
	将ObjectId转换为String(某些特殊的情况下,可能需要使用字符串格式的ObjectId,如果要转换ObjectId为字符串,newObjectId.str)
	
9.MapReduce(将大量数据合并为有用的聚合结果)
	语法:
	db.collection.mapReduce(
		function() {emit(key,value);},  //map function
		function(key,values) {return reduceFunction}, {   //reduce function
			out: collection,
			query: document,
			sort: document,
			limit: number
		}
	)


10.文本搜索
	从MongoDB2.4开始,MongoDB开始支持文本索引来搜索字符串内容,

参考:https://www.yiibai.com/mongodb/mongodb_regular_expression.html

本文地址:https://blog.csdn.net/qq_32252917/article/details/107312870

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网