mongodb学习(查询详解)
2015-05-21 21:58
555 查看
在前面几篇博客当中学习到了修改的详细操作,可是对于查询却一直是查询所有的记录,这篇文章将会带大家详细学习查询的操作。
查询指定字段
在进行正式的学习之前,我先将需要的数据插入数据库中,如下:
之后我们执行如下for循环,批量插入这些数据:
可以这样写:“db.students.find({},{name:1,email:1})”
db.documentName.find({条件},{键指定})
如下图:
可以看到,系统在查询name和email把”_id”也默认给我们查询出来了,如果不想查询出默认的”_id”字段,可以这样写:“db.students.find({},{_id:0,name:1,email:1})”
可是这里我们是查询的所有,第一个{}是用来填写查询条件的,如果我们需要按照条件查询,就可以将条件写到这里。先看看mongodb中的常用比较操作符:
查询不是中国的学生:
查询国籍不是中国或美国的学生
查询出名字中不存在”li”的学生的信息
查询第二本书是J***A的学生信息
这里注意,由于我们是查询第二本书,所以其索引是1。
查询出喜欢的书籍数量是4本的学生
查询出喜欢的书籍数量>3本的学生
1.增加字段size
db.students.update({},{set:{size:4}},false,true)
2.改变书籍的更新方式,每次增加一本书,对应的size+1
db.students.update({name:”tom”},{set:{size:4}},false,true)
2.改变书籍的更新方式,每次增加一本书,对应的size+1
db.students.update({name:”tom”},{push:{books:"linux"},$inc:{size:1}})
可以看到,我在这里为tom增加了一本书籍
3.查询书籍的数量是5的学生
db.students.find({size:5},{_id:0,name:1,age:1})
4.查询tom喜欢看的书的总数
查询tom喜欢的2~4本书
查询tom喜欢的最后一本书
查询年龄是22岁的student的姓名:
从图中可以看出,由于有好几个student的age==27.所以需要使用while来循环遍历结果。
skip返回指定数据的跨度
查询出student文档中第5~10条数据
sort排序查询
查询出第5~10条数据,按照年龄排序
比如:
查询出students集合中,每个国家中数学成绩最好的学生信息
如果需要让数学成绩显示的更加详细一点,可以在加上组完成器,来自定义显示信息:
2.根据网址查询:
http://127.0.0.1:28017/_commands
注意:如果该网址不能访问,是因为在配置mongodb启动的时候,没有加上”–rest” 选项,需要加上该选项,在重新启动mongodb,如下:
2.查询集合的详细信息
3.查看操作集合的最后一条错误信息
关于mongodb查询的学习,就到这里了。
查询指定字段
在进行正式的学习之前,我先将需要的数据插入数据库中,如下:
var students= [{ name:"jim", age:25, email:"75431457@qq.com", c:89,m:96,e:87, country:"USA", books:["JS","C++","EXTJS","MONGODB"] }, { name:"tom", age:25, email:"214557457@qq.com", c:75,m:66,e:97, country:"USA", books:["PHP","J***A","EXTJS","C++"] }, { name:"lili", age:26, email:"344521457@qq.com", c:75,m:63,e:97, country:"USA", books:["JS","J***A","C#","MONGODB"] }, { name:"zhangsan", age:27, email:"2145567457@qq.com", c:89,m:86,e:67, country:"China", books:["JS","J***A","EXTJS","MONGODB"] }, { name:"lisi", age:26, email:"274521457@qq.com", c:53,m:96,e:83, country:"China", books:["JS","C#","PHP","MONGODB"] }, { name:"wangwu", age:27, email:"65621457@qq.com", c:45,m:65,e:99, country:"China", books:["JS","J***A","C++","MONGODB"] }, { name:"zhaoliu", age:27, email:"214521457@qq.com", c:99,m:96,e:97, country:"China", books:["JS","J***A","EXTJS","PHP"] }, { name:"piaoyingjun", age:26, email:"piaoyingjun@uspcat.com", c:39,m:54,e:53, country:"Korea", books:["JS","C#","EXTJS","MONGODB"] }, { name:"lizhenxian", age:27, email:"lizhenxian@uspcat.com", c:35,m:56,e:47, country:"Korea", books:["JS","J***A","EXTJS","MONGODB"] }, { name:"lixiaoli", age:21, email:"lixiaoli@uspcat.com", c:36,m:86,e:32, country:"Korea", books:["JS","J***A","PHP","MONGODB"] }, { name:"zhangsuying", age:22, email:"zhangsuying@uspcat.com", c:45,m:63,e:77, country:"Korea", books:["JS","J***A","C#","MONGODB"] }]
之后我们执行如下for循环,批量插入这些数据:
for(var i = 0;i<students.length;i++){ db.students.insert(students[i]) }
字段查询
可以看到,此时我的所有数据都已经插入进去了。下面我来实现只查询部分字段,其实很简单,比如我只想查询name和email字段:可以这样写:“db.students.find({},{name:1,email:1})”
db.documentName.find({条件},{键指定})
如下图:
可以看到,系统在查询name和email把”_id”也默认给我们查询出来了,如果不想查询出默认的”_id”字段,可以这样写:“db.students.find({},{_id:0,name:1,email:1})”
可是这里我们是查询的所有,第一个{}是用来填写查询条件的,如果我们需要按照条件查询,就可以将条件写到这里。先看看mongodb中的常用比较操作符:
比较查询
比如我查询age和name字段,条件是age>=27&&age <25查询不是中国的学生:
包含或不包含in和in和nin查询
查询国籍是中国或美国的学生查询国籍不是中国或美国的学生
or查询
查询语文成绩>85或者英语成绩>90的学生null查询
把中国国籍的学生增加新的键”sex”,查询出sex=null的学生正则查询
查询名字中存在”li”的学生信息not的使用
$not可以用于任何地方的取反操作查询出名字中不存在”li”的学生的信息
数组查询$all和index应用
查询出喜欢看MONGOD和JS的学生查询第二本书是J***A的学生信息
这里注意,由于我们是查询第二本书,所以其索引是1。
查询指定数组长度$size
注意:$size不能与比较查询符一起使用查询出喜欢的书籍数量是4本的学生
查询出喜欢的书籍数量>3本的学生
1.增加字段size
db.students.update({},{set:{size:4}},false,true)
2.改变书籍的更新方式,每次增加一本书,对应的size+1
db.students.update({name:”tom”},{set:{size:4}},false,true)
2.改变书籍的更新方式,每次增加一本书,对应的size+1
db.students.update({name:”tom”},{push:{books:"linux"},$inc:{size:1}})
可以看到,我在这里为tom增加了一本书籍
3.查询书籍的数量是5的学生
db.students.find({size:5},{_id:0,name:1,age:1})
4.查询tom喜欢看的书的总数
$slice操作
$slice操作符返回文档中指定数组的内部值查询tom喜欢的2~4本书
查询tom喜欢的最后一本书
$where查询
复杂的查询就可以使用where,但是要尽量避免使用它,因为这个是比较耗性能的。查询年龄是22岁的student的姓名:
从图中可以看出,由于有好几个student的age==27.所以需要使用while来循环遍历结果。
limit分段查询
查询出students文档中前五条数据skip返回指定数据的跨度
查询出student文档中第5~10条数据
sort排序查询
查询出第5~10条数据,按照年龄排序
count查询
查询students集合中美国学生的人数db.students.find({country:"USA"}).count()
distinct去重查询
查询students集合中,一共有多少个国家group分组查询
语法:db.runCommand({group:{ ns:集合名称, key:分组的键 initial:初始化累加器, $reduce:组分解器, Condition:条件, Finallize:组完成器 }})
比如:
查询出students集合中,每个国家中数学成绩最好的学生信息
db.runCommand({group:{ ns:"students", key:{"country":true}, initial:{m:0}, $reduce:function(doc,prev) { if(doc.m > prev.m) { prev.m = doc.m; prev.name = doc.name; prev.country = doc.country; } }, condition:{m:{$gt:90}} }})
如果需要让数学成绩显示的更加详细一点,可以在加上组完成器,来自定义显示信息:
db.runCommand({group:{ ns:"students", key:{"country":true}, initial:{m:0}, $reduce:function(doc,prev) { if(doc.m > prev.m) { prev.m = doc.m; prev.name = doc.name; prev.country = doc.country; } }, finalize:function(prev) { prev.m = prev.name+"数学成绩:"+prev.m }, condition:{m:{$gt:90}} }})
查询mongodb为我们提供的命令
1.根据命令查询:db.listCommands()
2.根据网址查询:
http://127.0.0.1:28017/_commands
注意:如果该网址不能访问,是因为在配置mongodb启动的时候,没有加上”–rest” 选项,需要加上该选项,在重新启动mongodb,如下:
mongod --dbpath D:\mongodbData --rest
常用命令 ##、
1.查询服务器版本号与主机操作系统db.runCommand({buildInfo:1})
2.查询集合的详细信息
db.runCommand({collStats:"students"})
3.查看操作集合的最后一条错误信息
db.runCommand(getLastError:"students")
关于mongodb查询的学习,就到这里了。
相关文章推荐
- 学习MongoDB--(4-2):MongoDB查询(数组、内嵌文档和$where)
- mongodb学习:查询
- Mongodb查询学习
- MongoDB学习 (六):查询
- MongoDB学习笔记-查询
- 高级sql学习——null详解,字符格式详解,随机值查询!!!
- MongoDB学习记录03-MongoDB查询(java-driver)
- Hibernate学习-11-几种查询详解
- MongoDB的学习(2)--文档的查询
- mongodb的查询语句学习摘要
- mongodb学习:查询
- mongodb学习:查询
- JAVA mongodb 聚合几种查询方式详解
- MongoDB如何查询耗时记录的方法详解
- 详解:Mongodb慢查询(Mongodb slow query log)
- MongoDB查询命令详解
- 学习MongoDB 四: MongoDB查询(一)
- MongoDB学习 (五):查询操作符(Query Operators).1st
- MongoDB学习7_mongodb查询语句与sql语句的对照
- MongoDB学习 (六):查询