【收藏】MongoDB常用查询语句汇总

这是我参与8月更文挑战的第24天,活动详情查看:8月更文挑

前言

  我们经常使用的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】 小于< 【

gte】小于等于<=gte】 小于等于<= 【

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)}});
复制代码

结语

  作者介绍:【小阿杰】一个爱鼓捣的程序猿,JAVA开发者和爱好者。公众号【Java全栈架构师】维护者,欢迎关注阅读交流。

  好了,感谢您的阅读,希望您喜欢,如对您有帮助,欢迎点赞收藏。如有不足之处,欢迎评论指正。下次见。