您的位置:首页 > 数据库 > Mongodb

mongodb学习(查询详解)

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

查询指定字段

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

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查询的学习,就到这里了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: