MongoDB查询语法大全

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·- 如果喜欢,快分享给你的朋友们吧 -我们一起愉快的玩耍吧

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20190115G0KZRL00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券