频道栏目
首页 > 资讯 > Sybase > 正文

mongodb学习(查询详解)

15-05-23        来源:[db:作者]  
收藏   我要投稿

在前面几篇博客当中学习到了修改的详细操作,可是对于查询却一直是查询所有的记录,这篇文章将会带大家详细学习查询的操作。

查询指定字段
在进行正式的学习之前,我先将需要的数据插入数据库中,如下:

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
这里写图片描述
查询不是中国的学生:
这里写图片描述

包含或不包含in和nin查询

查询国籍是中国或美国的学生
这里写图片描述
查询国籍不是中国或美国的学生
这里写图片描述

or查询

查询语文成绩>85或者英语成绩>90的学生
这里写图片描述

null查询

把中国国籍的学生增加新的键”sex”,查询出sex=null的学生
这里写图片描述

正则查询

查询名字中存在”li”的学生信息
这里写图片描述

not的使用

$not可以用于任何地方的取反操作
查询出名字中不存在”li”的学生的信息
这里写图片描述

数组查询$all和index应用

查询出喜欢看MONGOD和JS的学生
这里写图片描述
查询第二本书是JAVA的学生信息
这里写图片描述
这里注意,由于我们是查询第二本书,所以其索引是1。

查询指定数组长度$size

注意:$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操作

$slice操作符返回文档中指定数组的内部值
查询tom喜欢的2~4本书
这里写图片描述
查询tom喜欢的最后一本书
这里写图片描述

$where查询

复杂的查询就可以使用where,但是要尽量避免使用它,因为这个是比较耗性能的。
查询年龄是22岁的student的姓名:
这里写图片描述
从图中可以看出,由于有好几个student的age==27.所以需要使用while来循环遍历结果。

limit分段查询

查询出students文档中前五条数据
这里写图片描述
skip返回指定数据的跨度
查询出student文档中第5~10条数据
这里写图片描述
sort排序查询
查询出第5~10条数据,按照年龄排序
这里写图片描述

关于mongodb查询的学习,就到这里了。

相关TAG标签
上一篇:ubuntu配置svn及http模式访问
下一篇:Yahoo开源的MySQL性能分析工具(MySQL Performance Analyzer)
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站