在前面几篇博客当中学习到了修改的详细操作,可是对于查询却一直是查询所有的记录,这篇文章将会带大家详细学习查询的操作。
查询指定字段
在进行正式的学习之前,我先将需要的数据插入数据库中,如下:
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","JAVA","EXTJS","C++"]
},
{
name:"lili",
age:26,
email:"344521457@qq.com",
c:75,m:63,e:97,
country:"USA",
books:["JS","JAVA","C#","MONGODB"]
},
{
name:"zhangsan",
age:27,
email:"2145567457@qq.com",
c:89,m:86,e:67,
country:"China",
books:["JS","JAVA","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","JAVA","C++","MONGODB"]
},
{
name:"zhaoliu",
age:27,
email:"214521457@qq.com",
c:99,m:96,e:97,
country:"China",
books:["JS","JAVA","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","JAVA","EXTJS","MONGODB"]
},
{
name:"lixiaoli",
age:21,
email:"lixiaoli@uspcat.com",
c:36,m:86,e:32,
country:"Korea",
books:["JS","JAVA","PHP","MONGODB"]
},
{
name:"zhangsuying",
age:22,
email:"zhangsuying@uspcat.com",
c:45,m:63,e:77,
country:"Korea",
books:["JS","JAVA","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
查询不是中国的学生:
查询国籍是中国或美国的学生
查询国籍不是中国或美国的学生
查询语文成绩>85或者英语成绩>90的学生
把中国国籍的学生增加新的键”sex”,查询出sex=null的学生
查询名字中存在”li”的学生信息
$not可以用于任何地方的取反操作
查询出名字中不存在”li”的学生的信息
查询出喜欢看MONGOD和JS的学生
查询第二本书是JAVA的学生信息
这里注意,由于我们是查询第二本书,所以其索引是1。
注意:$size不能与比较查询符一起使用
查询出喜欢的书籍数量是4本的学生
查询出喜欢的书籍数量>3本的学生
1.增加字段size
db.students.update({},{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操作符返回文档中指定数组的内部值
查询tom喜欢的2~4本书
查询tom喜欢的最后一本书
复杂的查询就可以使用where,但是要尽量避免使用它,因为这个是比较耗性能的。
查询年龄是22岁的student的姓名:
从图中可以看出,由于有好几个student的age==27.所以需要使用while来循环遍历结果。
查询出students文档中前五条数据
skip返回指定数据的跨度
查询出student文档中第5~10条数据
sort排序查询
查询出第5~10条数据,按照年龄排序
关于mongodb查询的学习,就到这里了。