MongoDB简介
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
MongoDB 是一个面向文档存储的数据库,操作起来比较简单和容易。
你可以在MongoDB记录中设置任何属性的索引 (如:FirstName="Sameer",Address="8 Gandhi Road")来实现更快的排序。
你可以通过本地或者网络创建数据镜像,这使得MongoDB有更强的扩展性。
如果负载的增加(需要更多的存储空间和更强的处理能力) ,它可以分布在计算机网络中的其他节点上这就是所谓的分片。
Mongo支持丰富的查询表达式。查询指令使用JSON形式的标记,可轻易查询文档中内嵌的对象及数组。
MongoDb 使用update()命令可以实现替换完成的文档(数据)或者一些指定的数据字段 。
Mongodb中的Map/reduce主要是用来对数据进行批量处理和聚合操作。
Map和Reduce。Map函数调用emit(key,value)遍历集合中所有的记录,将key与value传给Reduce函数进行处理。
Map函数和Reduce函数是使用Javascript编写的,并可以通过db.runCommand或mapreduce命令来执行MapReduce操作。
GridFS是MongoDB中的一个内置功能,可以用于存放大量小文件。
MongoDB允许在服务端执行脚本,可以用Javascript编写某个函数,直接在服务端执行,也可以把函数的定义存储在服务端,下次直接调用即可。
MongoDB支持各种编程语言:RUBY,PYTHON,JAVA,C++,PHP,C#等多种语言。
No.1 基本查询操作
1、同时都满足语法: "$all":[值1,值2,…]例如: 查询地址中包含“江西”,“广东”的学生db.students.find("address":{"$all":["江西","广东"]});
2、第二值为指定内容的集合语法: "feild.index":"值"例如: 查询地址信息中第二个值为“江西”的学生db.students.find("address.1": "江西");
3、指定数组大小语法: "$size": size例如: 查询只有两个地址信息的学生db.students.find("address": {"$size": 2});
4、控制数组值的显示语法: “$slice”: [要显示的个数]例如: 查询学生信息,其中地址信息只需显示头一个db.students.find("address": {"$slice": 1});例如: 查询学生信息,其中地址信息只需显示最后一个db.students.find("address": {"$slice": -1});例如: 查询学生信息,其中地址信息只需显示第二个db.students.find("address": {"$slice": [1,1]});
判断属性是否存在语法: "$exists": true|false例如: 查询存在parents属性的学生db.students.find("parents": {"$exists": true});
where查询[全表扫描]语法: "$where":"条件"例如: 查询年龄大于18岁的学生db.students.find("$where": "this.age>18");
多条查询语法: "$and":[,]例如: 查询年龄大于等于18的江西学生db.students.find("$and": [ {"age": {"$gte": 18}}, {"address":{"$all":["江西"]}}]);
模糊查询语法: {"feild": {"$regex": 正则标记, "$options": 选项}}或者简写: "feild": 正则标记选项: i -> 忽略大小写;m -> 多行查找;s -> 匹配所有字符包含换行例如: 查询姓名中以x或X开头的学生db.students.find("name": x/i);db.students.find("name": {"$regex": x/i});
数据排序语法: sort("feild": 1|-1) 1-升序,-1-降序
数据分页查询语法: skip(n) 跳过n行记录 ; limit(n) 取出n行记录例如:分页查询学生文档,每页5条记录db.students.find().skip(0).limit(5); // 第一页db.students.find().skip(5).limit(5); // 第二页
查询记录数语法: count()例如: 查询学生记录数db.students.count()
No.2 基本聚合操作[了解即可]
count() 函数:获取集合个数这个很简单,直接给示例: db.students.count({"sex":"男"}); //查询男生的人数。
distinct操作:实现数据去重查询语法: db.runCommond({"distinct":"集合名","key":"去重的属性"});例如: 查询不重名的学生信息db.runCommond({"distinct":"students","key":"name"});
group操作: 实现数据分组查询语法:
例如: 查询年龄大于19岁的男生、女生的人数
mapreduce操作:实现复杂查询语法:
例如: 统计出学生信息表中个班级(class)的人数(count)、平均成绩(avgGrade)、最低成绩(minGrade)、学生姓名(name)1、编写Map函数
2、编写Reduce函数
3、整合操作
4、查看执行结果
No.3 常用聚合框架[单表]
MapReduce虽然功能强大,但是代码非常复杂,在日常很少使用,在MongoDB2.x之后提供了聚合框架和聚合函数(aggregate)来实现类似的功能。
$group操作:实现分组查询
$project操作:实现输出字段的控制
$sort操作:实现数据排序查询
$limit操作:实现输出记录条数的控制
$skip操作:实现跨记录查询
$unwind操作:实现数组属性的打散输出
$out操作:指定查询结果的输出位置
3.1、$group分组查询
例如: 查询学生信息中各年龄的人数和平均、最低、最高成绩
3.2、$project控制查询输出的属性
支持四则运算: 加法("$add")、减法("$subtract")、乘法("$multiply")、除法("$divide")、求模("$mod")
支持关系运算: 大小比较("$cmp")、等于("$eq")、大于("$gt")、大于等于("$gte")、小于("$lt")、小于等于("$lte")、不等于("$ne")、判断NULL("$ifNull")
支持逻辑运算: 与("$and")、或("$or")、非("$not")
支持字符串操作: 连接("$concant")、截取("$substr")、转小写("$toLower")、转大写("$toUpper")、不区分大小写比较("$strcasecmp")
例如: 查询学生的姓名
例如:对姓名进行脱敏操作
3.3、$sort排序查询
例如:按年龄升序,成绩降序查询学生信息
3.4、$limit和$skip进行分页查询
例如:每页显示10条记录分页查询学生信息
No.4 常用聚合框架[多表关联查询]
在单表查询的基础上,我们只需再学习一个聚合框架($lookup)即可实现多表关联查询。
$lookup的简单语法:
例如:
查询酒店房型信息
·end·- 如果喜欢,快分享给你的朋友们吧 -我们一起愉快的玩耍吧
领取专属 10元无门槛券
私享最新 技术干货