前言
我们经常使用的MySQL是最流行的关系型数据库管理系统,随着时代的进步,互联网的发展关系型数据库已经不满足于互联网的需求,因此出现了非关系数据库,本文将介绍MongoDB 常用查询语句。
初始MongoDB
MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。
MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。
- database:数据库,SQL中的database含义。
- collection:数据库表/集合,SQL中的table含义。
- document:数据记录行/文档,SQL中的row含义。
- field:数据字段/域,SQL中的column含义。
- index:索引,SQL中的index含义。
- primary key:主键,MongoDB自动将_id字段设置为主键,SQL中的primary key含义。
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#等多种语言。
- MongoDB安装简单。
快速开始
查询所有
查询数据库表/集合的所有数据
db.getCollection("test").find();
查询指定字段数字类型
根据userId指定字段查询数据 数字类型
db.getCollection("test").find({"userId":632});
查询指定字段字符串类型
根据goodsNo指定字段查询数据 字符串类型
db.getCollection("test").find({"goodsNo":"789789789789"});
多条件查询
多条件查询指定字段数据信息
db.getCollection("test").find({"userId":632,"supplyGoodsNo":"870000065481"});
查询全数据表中的指定字段数据信息
查询全数据表中的指定字段数据信息,返回主键_id
db.getCollection("test").find({},{"userId":1,"supplyGoodsNo":1,"url":1});
查询全数据表中的指定字段数据信息,不返回主键_id
db.getCollection("test").find({},{"userId":1,"supplyGoodsNo":1,"url":1,"_id":0});
查询数据集中指定区间的数据
查询数据集中指定区间的数据 比较大小的数据 其中大于> 【gt】小于<【gt】 小于< 【gt】小于<【lt】 大于等于>=【gte】小于等于<=【gte】 小于等于<= 【gte】小于等于<=【lte】 不等于!=【$ne】
db.getCollection("test").find({"userId":{"$gte":500,"$lte":800}});
查询不等于的数据信息
查询不等于的数据信息
db.getCollection("test").find({"userId":{"$ne":500}});
in 包含
in 包含某些数据
db.getCollection("test").find({"userId":{"$in":[500,600,632]}});
not in 不包含
not in 不包含某些数据
db.getCollection("test").find({"userId":{"$nin":[123,500,4000]}});
or 或者
or 或者 ,相当于SQL中的select * form test where userId = 632 or supplyGoodsNo = "870000065481"语句
db.getCollection("test").find({"$or":[{"userId":632},{"supplyGoodsNo":"870000065481"}]});
mod 取模
mod 取模,相当于SQL中 select * from test where (userId mod 5) = 1语句。
db.getCollection("test").find({"userId":{"$mod":[5,1]}});
not
not语句查询 相当于SQL中 select * from test where not (userId = 600)语句。
db.getCollection("test").find({"$not":{"userId":600}});
空查询
空查询相当于SQL中 select * from test where userId is null 语句。
db.getCollection("test").find({"userId":{"$in":[null],"$exists":true}});
正则查询
正则查询
db.getCollection("test").find({"userId" : /63?/i});
数组查询
对数组的查询,字段url中,既包含"a",又包含"b"的纪录
db.getCollection("test").find({url:{$all:["a","e"]}});
对数组的查询, 字段url中,第4个(从0开始)元素是a的纪录
db.getCollection("test").find({url.3,"a"});
对数组的查询, 查询数组元素个数是3的记录,$size前面无法和其他的操作符复合使用
db.getCollection("test").find({"url" : {"$size" : 3}});
时间比较
比较时间大小,某个时间段之后的数据(方式1)
db.getCollection("test").find({"createTime" : {"$gte" : ISODate("2021-08-12 16:03:06.815")}});
比较时间大小,某个时间段之后的数据(方式2)
db.getCollection("test").find({"createTime":{$gte:new Date(2021,7,12)}});