mongoDB的文档查询
1.简单查询:
find() 方法以非结构化的方式来显示所有文档。
语法
MongoDB 查询数据的语法格式如下: collection是集合名字,注意应该是当前数据库的集合,collection也可以换为getCollection('colle_name')
db.collection.find(query, projection)
- query :可选,使用查询操作符指定查询条件
- projection :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)。
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:
>db.col.find().pretty()
pretty() 方法以格式化的方式来显示所有文档。
例子:
(1)简单的查询所有:
> db.colle1.find()
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 25 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 25 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
(2)简单的查询单个:
> db.colle1.findOne()
{
"_id" : ObjectId("5ab482095114c7b7fd6e83d9"),
"name" : "qlq1",
"age" : 25
}
注意:如果在DOS窗口需要美化查询结果可以加pretty()函数(此函数不能用于查询单个)
> db.colle1.find().pretty()
{
"_id" : ObjectId("5ab482095114c7b7fd6e83d9"),
"name" : "qlq1",
"age" : 25
}
{
"_id" : ObjectId("5ab4820d5114c7b7fd6e83da"),
"name" : "qlq12",
"age" : 25
}
{
"_id" : ObjectId("5ab482105114c7b7fd6e83db"),
"name" : "qlq13",
"age" : 25
}
{
"_id" : ObjectId("5ab482135114c7b7fd6e83dc"),
"name" : "qlq14",
"age" : 25
}
{
"_id" : ObjectId("5ab482475114c7b7fd6e83dd"),
"name" : "qlq15",
"age" : 25
}
>
2.按条件查询:
数据:
> db.colle1.find()
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
(1)MongoDB 与 RDBMS Where 语句比较
如果你熟悉常规的 SQL 数据,通过下表可以更好的理解 MongoDB 的条件语句查询:
| 操作 | 格式 | 范例 | RDBMS中的类似语句 |
|---|---|---|---|
| 等于 | {<key>:<value>} |
db.col.find({"by":"菜鸟教程"}).pretty() |
where by = '菜鸟教程' |
| 小于 | {<key>:{$lt:<value>}} |
db.col.find({"likes":{$lt:50}}).pretty() |
where likes < 50 |
| 小于或等于 | {<key>:{$lte:<value>}} |
db.col.find({"likes":{$lte:50}}).pretty() |
where likes <= 50 |
| 大于 | {<key>:{$gt:<value>}} |
db.col.find({"likes":{$gt:50}}).pretty() |
where likes > 50 |
| 大于或等于 | {<key>:{$gte:<value>}} |
db.col.find({"likes":{$gte:50}}).pretty() |
where likes >= 50 |
| 不等于 | {<key>:{$ne:<value>}} |
db.col.find({"likes":{$ne:50}}).pretty() |
where likes != 50 |
例如:查询名字为qlq1的信息
db.getCollection('colle1').findOne({name:'qlq1'})
查询年龄大于25 的:
db.getCollection('colle1').find({age:{$gte:25}})
查询年龄大于25并且名字为qlq13的: (AND条件查询)
db.getCollection('colle1').find({age:{$gte:25},name:'qlq13'})
(2)MongoDB AND 条件
MongoDB 的 find() 方法可以传入多个键(key),每个键(key)以逗号隔开,即常规 SQL 的 AND 条件。
语法格式如下:
>db.col.find({key1:value1, key2:value2}).pretty()
例子:
查询年龄大于25并且名字为qlq13的: (AND条件查询)
db.getCollection('colle1').find({age:{$gte:25},name:'qlq13'})
(3)MongoDB OR 条件
MongoDB OR 条件语句使用了关键字 $or,语法格式如下:
>db.col.find(
{
$or: [
{key1: value1}, {key2:value2}
]
}
).pretty()
例如:
查询名字为qlq或者名字为qlq1的人的信息:
db.getCollection('colle1').find({$or:[{name:'qlq1'},{name:'qlq13'}]})
(4)AND 和 OR 联合使用
例如:下面语句类似于关系型数据库的:
where age=25 and (name='qlq1' or name='qlq13')
db.getCollection('colle1').find({$or:[{name:'qlq1'},{name:'qlq13'}],age:25})
(5)范围运算符查询:
使用 "$in" 或者 "nin"判断是否在某个范围内
例如:查询年龄在20,25范围内的信息。
db.getCollection('colle1').find({age:{$in:[20,25]}})
查询年龄不在20,25范围内的信息。
db.getCollection('colle1').find({age:{$nin:[20,25]}})
(6)正则表达式(类似于JS的功能)
- 使用//或者使用$regex编写正则表达式
例如:查询name以qlq12开头的人的信息:
db.getCollection('colle1').find({name:/^qlq12/})
db.getCollection('colle1').find({name:{$regex:'^qlq12'}})
(7)自定义查询:
- 使用$where后面编写一个函数,返回满足条件的数据:
例如:查询年龄大于等于25的学生:
db.getCollection('colle1').find({$where:function(){return this.age>=25}})
db.getCollection('colle1').find({$where:function(){return this.name.indexOf('qlq12')==0}})
上面的mongodb的函数都是JS函数,因此可以参考JS函数即可完成各种查询。
3.MongoDB Limit与Skip方法 用于分页查询
数据:
> db.colle1.find()
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
MongoDB Limit() 方法 取几条
如果你需要在MongoDB中读取指定数量的数据记录,可以使用MongoDB的Limit方法,limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
语法
limit()方法基本语法如下所示:
>db.COLLECTION_NAME.find().limit(NUMBER)
例如::取前两条数据
> db.colle1.find().limit(2)
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
MongoDB Skip() 方法 跳过几条
我们除了可以使用limit()方法来读取指定数量的数据外,还可以使用skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
语法
skip() 方法脚本语法格式如下:
>db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
例如:跳过两条取后三条
> db.colle1.find().skip(2)
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
两个结合实现分页:
例如:每页2条,现在取第二页
> db.colle1.find().skip(1*2).limit(2)
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
4.映射指定列:(投影筛选) find方法的第二个参数
选择一条数据的指定的列,而不需要全部的列。
不写的活默认索引列出来
> db.colle1.find({},{})
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
或者:
> db.colle1.find({},{name:1,_id:0,age:1})
{ "name" : "qlq1", "age" : 20 }
{ "name" : "qlq12", "age" : 25 }
{ "name" : "qlq13", "age" : 25 }
{ "name" : "qlq14", "age" : 50 }
{ "name" : "qlq15", "age" : 25 }
>
例如:只显示name列
> db.colle1.find({},{name:1})
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1" }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12" }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13" }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14" }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15" }
如果也不想ID列出来:
> db.colle1.find({},{name:1,_id:0})
{ "name" : "qlq1" }
{ "name" : "qlq12" }
{ "name" : "qlq13" }
{ "name" : "qlq14" }
{ "name" : "qlq15" }
>
5.排序 sort()方法
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
语法
sort()方法基本语法如下所示:
>db.COLLECTION_NAME.find().sort({KEY:1})
例如:按年龄降序排序查询人的信息
> db.getCollection('colle1').find({}).sort({age:-1})
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
例如:按年龄降序升序序查询人的信息
> db.getCollection('colle1').find().sort({age:1})
{ "_id" : ObjectId("5ab482095114c7b7fd6e83d9"), "name" : "qlq1", "age" : 20 }
{ "_id" : ObjectId("5ab4820d5114c7b7fd6e83da"), "name" : "qlq12", "age" : 25 }
{ "_id" : ObjectId("5ab482105114c7b7fd6e83db"), "name" : "qlq13", "age" : 25 }
{ "_id" : ObjectId("5ab482475114c7b7fd6e83dd"), "name" : "qlq15", "age" : 25 }
{ "_id" : ObjectId("5ab482135114c7b7fd6e83dc"), "name" : "qlq14", "age" : 50 }
注意:
skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
6.统计个数: count()方法
- 语法:
db.collection.find({条件}).count()
或者
db.collection.count({条件})
- 例如:统计年龄大于25的员工人数
第一种:
> db.getCollection('colle1').count({age:{$gte:25}})
4
第二种:
> db.getCollection('colle1').find({age:{$gte:25}}).count()
4
7.去除重复数据: distinct()方法
此方法返回去重字段在集合中一共有几种值
- 语法:
db.collection.distinct('去重字段',{条件})
例如:
> db.getCollection('colle1').distinct('age',{})
[ 20, 25, 50 ]
8. $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
MongoDB 中可以使用的类型如下表所示:
| 类型 | 数字 | 备注 |
|---|---|---|
| Double | 1 | |
| String | 2 | |
| Object | 3 | |
| Array | 4 | |
| Binary data | 5 | |
| Undefined | 6 | 已废弃。 |
| Object id | 7 | |
| Boolean | 8 | |
| Date | 9 | |
| Null | 10 | |
| Regular Expression | 11 | |
| JavaScript | 13 | |
| Symbol | 14 | |
| JavaScript (with scope) | 15 | |
| 32-bit integer | 16 | |
| Timestamp | 17 | |
| 64-bit integer | 18 | |
| Min key | 255 | Query with -1. |
| Max key |
例如:
数据:
> db.exam.find()
{ "_id" : ObjectId("5ab8ae0d807bacd3133efcf6"), "name" : "qlq", "age" : 25 }
{ "_id" : ObjectId("5ab8ae13807bacd3133efcf7"), "name" : "qlq", "age" : true }
现在查询age的类型是boolean类型的数据:
> db.getCollection('exam').find({"age":{$type : 8}})
{ "_id" : ObjectId("5ab8ae13807bacd3133efcf7"), "name" : "qlq", "age" : true }
mongoDB的文档查询的更多相关文章
- MongoDB入门---文档查询操作之条件查询&and查询&or查询
经过前几天的学习之路,今天终于到了重头戏了.那就是文档查询操作.话不多说哈,直接看下语法: db.collection.find(query, projection) query :可选,使用查询操作 ...
- MongoDB入门---文档查询之$type操作符&limit方法&skip方法&简单排序(sort)操作
上一篇文章呢,已经分享过了一部分查询操作了,这篇文章呢?就来继续分享哈.接下来呢我们直接看MongoDB中的$type操作符哈.它呢是基于BSON类型来检索集合中匹配的数据类型,并且返回结果,在Mon ...
- MongoDB快速入门学习笔记4 MongoDB的文档查询操作
先把student删除,再重新插入数据 > db.student.drop() true > db.student.insert([{ "_id" : 1, " ...
- MongoDB多文档查询
db.getCollection('transactionCompensation').find( { "$and":[ { "status":{ " ...
- SpringMVC MongoDB之“基本文档查询(Query、BasicQuery)”
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery)(一)
一.简单介绍 Spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一 ...
- Spring Data MongoDB 三:基本文档查询(Query、BasicQuery
一.简介 spring Data MongoDB提供了org.springframework.data.mongodb.core.MongoTemplate对MongoDB的CRUD的操作,上一篇我 ...
- Spring Data MongoDB 五:进阶文档查询(分页、Morphia)(二)
Spring Data MongoDB 三:基本文档查询(Query.BasicQuery)(一) 学习MongoDB 六: MongoDB查询(游标操作.游标信息)(三) 一.简单介绍 Spring ...
- MongoDB数据库文档操作
前面的话 本文将详细介绍MongoDB数据库关于文档的增删改查 数据类型 在介绍文档操作之前,首先要了解MongoDB的数据类型 MongoDB支持许多数据类型,包括 1.字符串 - 这是用于存储数据 ...
随机推荐
- (4)分布式下的爬虫Scrapy应该如何做-规则自动爬取及命令行下传参
本次探讨的主题是规则爬取的实现及命令行下的自定义参数的传递,规则下的爬虫在我看来才是真正意义上的爬虫. 我们选从逻辑上来看,这种爬虫是如何工作的: 我们给定一个起点的url link ,进入页面之后提 ...
- 【廖雪峰老师python教程】——filter/sorted
filter Python内建的filter()函数用于过滤序列. 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然 ...
- 《python核心编程第二版》第8章习题
8–1. 条件语句. 请看下边的代码 # statement Aif x > 0:# statement Bpasselif x < 0:# statement Cpasselse:# s ...
- Laravel 5.5 创建全局公共函数
一.需求 我在使用 Laravel 进行项目逻辑处理的时候要加载一些方法,需要全局调用 这个方法又必须得是一个全局函数,因此需要给 Laravel 创建全局的公共函数 二.实现 1.创建文件 在 ap ...
- 关键词提取TF-IDF算法/关键字提取之TF-IDF算法
TF-IDF(term frequency–inverse document frequency)是一种用于信息检索与信息探勘的常用加权技术.TF的意思是词频(Term - frequency), ...
- c++知识点总结--函数模板
通用函数可变参模板 用于处理不限定参数的函数 showall(){//空函数,接口,最后结束递归 } template<typename T,typename... Args> void ...
- StanFord 编程方法
教程下载地址:http://www.yyets.com/resource/26208 定制工具下载地址:http://www.stanford.edu/class/cs106a/cgi-bin/cla ...
- [转] UnityVS(Visual Studio Tools For Unity)的安装与使用
一些废话 Unity 的开发者们,尤其是微软系的Unity开发者们,用Mono是不是烦死了?你是不是跟我一样,用vs来写代码,用Mono来跟踪调试?好麻烦啊好麻烦. 也许你会说,傻逼你不会用Unity ...
- 域名解析的DNS缓存如何清理
域名解析(DNS)缓存是什么? 域名解析缓存又名DNS缓存,常见表现名称是TTL:(TimeToLive)生存时间,就是域名解析记录在DNS服务器中的存留有效时间. 当各地的DNS服务器接受到解析请求 ...
- 算法(2) Find All Numbers Disappeared in an Array
题目:整数数组满足1<=a[i]<=n(n是数组的长度),某些元素出现一次,某些元素出现两次,在数组a[i]中找到[1,n]区间中未出现的数字.比如输入[4,3,2,7,8,2,3,1], ...