mongoDB(4):find()查询、分页、游标
2016-07-19 23:40
417 查看
为了方便试验,我先在persons里插入如下类似的几条数据(可以现在编辑器上打完语句在粘贴执行)
![](http://img.blog.csdn.net/20160719233408628)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/c3c96f1d-b15e-4f6e-bea1-4b191b52a4e3.png)
由于篇幅限制,这里就不展示所有数据,c m e分别表示语文数学英语的成绩
由于在shell里查看这么多数据会显示的很乱,所以可以用VUE图形工具查看
![](http://img.blog.csdn.net/20160719233424004)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/51b39840-eff9-4461-8b7d-74327d478b88.png)
用图形工具可以带来简便,但由于现在是在学习过程,所以建立还是用原始的shell来学习
VUE作为辅助
>指定返回的键
db.[documentName].find({条件},{键指定})
![](http://img.blog.csdn.net/20160719233440723)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/ed4aa1d4-cdb2-4c0a-b2c1-977fed6d5c4c.png)
如上,0表示不显示,1表示显示,这样查看数据会容易看很多
>比较操作符
$lt <
$lte <=
$gt >
$gtr >=
$ne !=
下面以一系列练习来演示
1、查询条件
1.1查询年龄在25-27之间的学生
![](http://img.blog.csdn.net/20160719233458301)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/88c13166-671f-4375-92d6-f02e22e12f3d.png)
1.2查询所有不是韩国的学生的数学成绩
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/40849fe7-fa0e-4010-aa33-2e5222ee1ba4.png)
![](http://img.blog.csdn.net/20160719233508567)
2包含或不包含
$in或$nin(类型关系型数据库中的in not in)
2.1查询国籍是中国或者美国的学生信息
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/6fbfe309-b124-4599-ba7d-808e3948d313.png)
![](http://img.blog.csdn.net/20160719233516426)
![](http://img.blog.csdn.net/20160719233516426)
3or查询
$or
查询语文成绩大于85或者英语成绩大于90的学生
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/6d548328-ffb9-4b53-a3ca-cbbc6f922c40.png)
![](http://img.blog.csdn.net/20160719233533114)
4NULL
把中国国籍学生增加键sex
![](http://img.blog.csdn.net/20160719233555817)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/c49a85ab-caf6-43e4-894d-6c7fea71a69d.png)
然后再来查询sex等于null的学生
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/bdc9393c-e905-4166-a276-195ce6d8829b.png)
![](http://img.blog.csdn.net/20160719233604114)
5正则查询
查询名字中存在“li”的学生信息
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/5ef57db0-8daa-453a-9a63-f9b7b1e988fc.png)
![](http://img.blog.csdn.net/20160719233614724)
6$not的使用:可以起到取反的作用
查询名字中不存在li的学生信息
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/0d99da4e-98ff-4211-8797-86fd89128f67.png)
![](http://img.blog.csdn.net/20160719233628021)
7数组查询$all和$index应用
7.1查询喜欢看mongodb和js的学生
![](http://img.blog.csdn.net/20160719233642271)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/21434ae1-2348-4a32-89c1-c98b8e0c2df0.png)
7.2查询第二本书是java的学生信息
![](http://img.blog.csdn.net/20160719233647959)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/2bb79751-a52d-4233-8756-00ccb21702bb.png)
8查询指定长度数组$size,它不能与比较查询符一起使用
查询喜欢的书籍数量是4本的学生
> db.persons.find({books:{$size:4}},{_id:0,name:1})
所有数据追加键size:4
db.persons.update({},{$set:{size:4}},false,true)
增加书籍时在size字段追加1
如:db.persons.updata({查询器},{$push:{books:"Oracle"},$inc:{size:1}})
9利用shell查询出jim喜欢看的书的数量
var persons = db.persons.find({name:"jim"})
while(persons.hasNext()){
obj = persons.next();
print(obj.books.length)
}
这里用到了游标
10$slice操作符返回文档中指定数组的内部值
10.1查询jim书架的第2-4本书
![](http://img.blog.csdn.net/20160719233719538)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/4981b0c1-7718-479e-814f-55b944e55a63.png)
10.2查询jim的最后一本书
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/61ab4514-4f4a-4b6f-af81-028b3931c740.png)
![](http://img.blog.csdn.net/20160719233727538)
11文档查询
先为jim添加如下数据
![](http://img.blog.csdn.net/20160719233741818)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/5cc85b8e-561d-464a-b251-b1b7df442ef7.jpg)
查询在K学校上过学并且得A的学生
![](http://img.blog.csdn.net/20160719233758070)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/50b1364c-ee0b-4fa9-b5aa-7283dbf71cea.png)
上面这个方法有弊端。就是顺序不能改变school:“K”与score:"A"调换位置就会出错
可以用下面的方法
![](http://img.blog.csdn.net/20160719233820148)
![](http://img.blog.csdn.net/20160719233820148)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/47b71017-2188-431b-9e8d-15ffac3827d1.png)
但是这样的查询也有问题
改动为school.school:J就会发现也会出现数据
所以:
单条条件组查询$elemMatch
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/92104550-1b0e-4896-906b-7757e825b574.png)
![](http://img.blog.csdn.net/20160719233838305)
>分页查询
1limit返回指定的数据条数
查询前5条
![](http://img.blog.csdn.net/20160719233852946)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/16e29d16-df7c-46a2-81d1-22e6a8fab16f.png)
2skip返回指定数据的跨度
查询第5-10条
![](http://img.blog.csdn.net/20160719233906431)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/21429aeb-cc77-48bb-b230-bed6a24dd619.png)
3sort返回按照年龄排序的数据 (1:正序 -1:倒序)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/3faca3ed-3901-47d3-9571-270975ddaed3.png)
![](http://img.blog.csdn.net/20160719233916478)
最后 游标(类似于遍历 不过游标一开始不是指向第一条数据,而是第一条之前,所以必须先next)
![](http://img.blog.csdn.net/20160719233927384)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/549c98a5-a336-4430-b282-7af35d04337a.jpg)
游标几个销毁条件:
1、客户端发来信息叫他销毁
2、游标迭代完毕
3、默认游标超过10分钟没用也会自动清除
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/c3c96f1d-b15e-4f6e-bea1-4b191b52a4e3.png)
由于篇幅限制,这里就不展示所有数据,c m e分别表示语文数学英语的成绩
由于在shell里查看这么多数据会显示的很乱,所以可以用VUE图形工具查看
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/51b39840-eff9-4461-8b7d-74327d478b88.png)
用图形工具可以带来简便,但由于现在是在学习过程,所以建立还是用原始的shell来学习
VUE作为辅助
>指定返回的键
db.[documentName].find({条件},{键指定})
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/ed4aa1d4-cdb2-4c0a-b2c1-977fed6d5c4c.png)
如上,0表示不显示,1表示显示,这样查看数据会容易看很多
>比较操作符
$lt <
$lte <=
$gt >
$gtr >=
$ne !=
下面以一系列练习来演示
1、查询条件
1.1查询年龄在25-27之间的学生
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/88c13166-671f-4375-92d6-f02e22e12f3d.png)
1.2查询所有不是韩国的学生的数学成绩
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/40849fe7-fa0e-4010-aa33-2e5222ee1ba4.png)
2包含或不包含
$in或$nin(类型关系型数据库中的in not in)
2.1查询国籍是中国或者美国的学生信息
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/6fbfe309-b124-4599-ba7d-808e3948d313.png)
3or查询
$or
查询语文成绩大于85或者英语成绩大于90的学生
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/6d548328-ffb9-4b53-a3ca-cbbc6f922c40.png)
4NULL
把中国国籍学生增加键sex
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/c49a85ab-caf6-43e4-894d-6c7fea71a69d.png)
然后再来查询sex等于null的学生
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/bdc9393c-e905-4166-a276-195ce6d8829b.png)
5正则查询
查询名字中存在“li”的学生信息
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/5ef57db0-8daa-453a-9a63-f9b7b1e988fc.png)
6$not的使用:可以起到取反的作用
查询名字中不存在li的学生信息
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/0d99da4e-98ff-4211-8797-86fd89128f67.png)
7数组查询$all和$index应用
7.1查询喜欢看mongodb和js的学生
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/21434ae1-2348-4a32-89c1-c98b8e0c2df0.png)
7.2查询第二本书是java的学生信息
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/2bb79751-a52d-4233-8756-00ccb21702bb.png)
8查询指定长度数组$size,它不能与比较查询符一起使用
查询喜欢的书籍数量是4本的学生
> db.persons.find({books:{$size:4}},{_id:0,name:1})
所有数据追加键size:4
db.persons.update({},{$set:{size:4}},false,true)
增加书籍时在size字段追加1
如:db.persons.updata({查询器},{$push:{books:"Oracle"},$inc:{size:1}})
9利用shell查询出jim喜欢看的书的数量
var persons = db.persons.find({name:"jim"})
while(persons.hasNext()){
obj = persons.next();
print(obj.books.length)
}
这里用到了游标
10$slice操作符返回文档中指定数组的内部值
10.1查询jim书架的第2-4本书
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/4981b0c1-7718-479e-814f-55b944e55a63.png)
10.2查询jim的最后一本书
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/61ab4514-4f4a-4b6f-af81-028b3931c740.png)
11文档查询
先为jim添加如下数据
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/5cc85b8e-561d-464a-b251-b1b7df442ef7.jpg)
查询在K学校上过学并且得A的学生
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/50b1364c-ee0b-4fa9-b5aa-7283dbf71cea.png)
上面这个方法有弊端。就是顺序不能改变school:“K”与score:"A"调换位置就会出错
可以用下面的方法
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/47b71017-2188-431b-9e8d-15ffac3827d1.png)
但是这样的查询也有问题
改动为school.school:J就会发现也会出现数据
所以:
单条条件组查询$elemMatch
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/92104550-1b0e-4896-906b-7757e825b574.png)
>分页查询
1limit返回指定的数据条数
查询前5条
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/16e29d16-df7c-46a2-81d1-22e6a8fab16f.png)
2skip返回指定数据的跨度
查询第5-10条
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/21429aeb-cc77-48bb-b230-bed6a24dd619.png)
3sort返回按照年龄排序的数据 (1:正序 -1:倒序)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/3faca3ed-3901-47d3-9571-270975ddaed3.png)
最后 游标(类似于遍历 不过游标一开始不是指向第一条数据,而是第一条之前,所以必须先next)
![](file:///D:/Documents/My%20Knowledge/temp/54e06ccf-7c93-49f0-9843-18f5a1e44f70_4_files/549c98a5-a336-4430-b282-7af35d04337a.jpg)
游标几个销毁条件:
1、客户端发来信息叫他销毁
2、游标迭代完毕
3、默认游标超过10分钟没用也会自动清除
相关文章推荐
- mongoDB(3):数据的更新、插入、删除
- php mongodb扩展安装
- mongoDB中的连接池
- 【MongoDB】增删改查基本操作
- Spring MVC + MongoDB + Maven搭建项目开发环境
- MongoDB碎碎念
- Windows下的安装MongoDB
- Centos安装MongoDB
- Mongodb(2)创建数据库,删除数据库,创建集合,删除集合,显示文档内容
- Mongodb主从复制/ 副本集/分片集群介绍
- Mongodb副本集+分片集群环境部署记录
- 线上mongodb 数据库用户到期时间修改的操作记录
- python mongodb MapReduce
- windows下MongoDB的安装及配置
- 一、初学MongoDB(java)
- Mongodb(1)如何存储以及简介
- Mongodb GridFS中对文件的上传、下载、删除
- .NET平台MongoDB下使用JobStore存储Quartz.Net的Job,Trigger数据
- MongoDB Map Reduce
- MongoDB Replicate Set 复制集安装与配置