博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MongoDB数据查询详解
阅读量:6825 次
发布时间:2019-06-26

本文共 5039 字,大约阅读时间需要 16 分钟。

查询全部 ​

db.infos.find();
db.infos.find({"url":"www.baidu.com"});

id不要显示出来

db.infos.find({"url":"www.baidu.com"},{"_id":0});

关系运算

大于 $gt 小于  $lt 大于等于  $gte 小于等于 $lte 不等于 $ne

准备测试数据

db.students.insert({"name":"张三","sex":"男","age":19,"score":89,"address":"海淀区"});db.students.insert({"name":"李四","sex":"女","age":20,"score":59,"address":"朝阳区"});db.students.insert({"name":"王五","sex":"女","age":19,"score":99,"address":"西城区"});db.students.insert({"name":"赵六","sex":"男","age":20,"score":100,"address":"东城区"});db.students.insert({"name":"孙七","sex":"男","age":19,"score":20,"address":"海淀区"});db.students.insert({"name":"王八","sex":"女","age":21,"score":0,"address":"海淀区"});db.students.insert({"name":"刘九","sex":"男","age":19,"score":70,"address":"朝阳区"});db.students.insert({"name":"钱十","sex":"女","age":21,"score":56,"address":"西城区"});

查询姓名为张三的学生的数据

db.students.find({"name":"张三"});

查询性别是男的学生的信息

db.students.find({"sex":"男"});

查询年龄大于19岁的学生

db.students.find({"age":{"$gt":19}});

查询成绩大于等于60分的学生

db.students.find({"score":{"$gte":60}});

查询姓名不是王五的信息

db.students.find({"name":{"$ne":"王五"}});

逻辑运算

三种类型

与  $and 或  $or  非  $nor

查询年龄在19到20之间的数据

db.students.find({"age":{"$gte":19,"$lte":20}});

查询年龄不是19的数据

db.students.find({"age":{"$ne":19}});

查询年龄大于19岁,或者成绩大于90分的学生的信息

db.students.find({    "$or": [        {"age":{"$gt":19}},        {"score":{"$gt":90}}    ]    });

查询年龄不大于19或者成绩不大于90的学生的信息

db.students.find({    "$nor": [        {"age":{"$gt":19}},        {"score":{"$gt":90}}    ]    });

模运算

查询年龄模20余1的数据,也就是21或者41的学生信息

db.students.find({"age":{"$mod":[20,1]}});

422101-20171117152802749-2071170216.png

范围查询

$in 、 $nin

查询姓名是“张三”、“李四”、“王五”的信息。

多个数据用数组表示。

db.students.find({"name":{"$in":["张三","李四","王五"]}})
db.students.find({"name":{"$nin":["张三","李四","王五"]}})

数组查询

mongoDB支持数组保存,也支持数组匹配查询。

再插入一些数据

db.students.insert({"name":"大神 - A","sex":"女","age":21,"score":0,"address":"海淀区","course":["语文","数学","英语","音乐","政治"]});db.students.insert({"name":"大神 - B","sex":"男","age":19,"score":70,"address":"朝阳区","course":["语文","数学"]});db.students.insert({"name":"大神 - C","sex":"女","age":21,"score":56,"address":"西城区","course":["语文","数学","英语"]});db.students.insert({"name":"大神 - D","sex":"女","age":21,"score":0,"address":"海淀区","course":["语文","数学","英语"]});db.students.insert({"name":"大神 - E","sex":"男","age":19,"score":70,"address":"朝阳区","course":["英语","音乐"]});db.students.insert({"name":"大神 - F","sex":"女","age":21,"score":56,"address":"西城区","course":["语文","数学","英语","音乐"]});

查询同时参加语文和数学课程的学生

db.students.find({"course":{"$all":["语文","数学"]}});

$all 可以用在数组查询上,也可以用于一个数据的匹配上。

查询地址是“海淀区”的信息。

db.students.find({"address":{"$all":["海淀区"]}});

范例:查询课程数组中第二个内容是音乐的用户。使用索引。

db.getCollection('students').find({"course.1":"音乐"})

422101-20171117164907359-398577687.png

范例:查询只参加两门课程的学生

db.getCollection('students').find({"course":{"$size":2}})

422101-20171117165130265-1853899545.png

范例:返回年龄为19岁的学生信息,课程信息只返回两条。

db.getCollection('students').find({"age":21},{"course":{"$slice":2}})

也可以设置负数,取出后两门的数据。

db.getCollection('students').find({"age":21},{"course":{"$slice":-2}})

或者只取出中间部分的信息。

db.getCollection('students').find({"age":21},{"course":{"$slice":[1,2]}})

嵌套集合运算

再增加一些数据

db.students.insert({"name":"高大拿 - A","sex":"女","age":21,"score":0,"address":"海淀区","course":["语文","数学","英语","音乐","政治"],    "parents":        [{"name":"高大拿 - A(父亲)","age":50,"job":"工人"},        {"name":"高大拿 - A(母亲)","age":46,"job":"职员"}]    });db.students.insert({"name":"高大拿 - B","sex":"男","age":19,"score":70,"address":"朝阳区","course":["语文","数学"],    "parents":        [{"name":"高大拿 - B(父亲)","age":50,"job":"处长"},        {"name":"高大拿 - B(母亲)","age":46,"job":"局长"}]    });db.students.insert({"name":"高大拿 - C","sex":"女","age":21,"score":56,"address":"西城区","course":["语文","数学","英语"],    "parents":        [{"name":"高大拿 - C(父亲)","age":50,"job":"工人"},        {"name":"高大拿 - C(母亲)","age":46,"job":"局长"}]    });

范例:查询年龄是19,父母中有职务是局长的数据

db.getCollection('students').find({    "$and":[        {"age":19},        {"parents":{"$elemMatch":{"job":"局长"}}}    ]    })

判断某个字段是否存在

通过 $exists来判断某个字段是否存在

范例:查询具有parents成员的数据

db.getCollection('students').find({            "parents":{"$exists":true}})

范例:查询不具有course成员的数据

db.students.find({            "course":{"$exists":false}})

条件过滤

$where

db.students.find({   "$where":"this.age>20"})
db.students.find("this.age>21");
db.students.find(function() {    return this.age > 20});
db.students.find({"$where":function() {    return this.age > 20}});

多条件查询

db.students.find({"$and":[        {"$where":"this.age>20"},        {"$where":"this.score>20"}    ]});

这里会将MongoDB的BSON格式变为JavaScript格式,不方便使用数据库索引机制。

正则运算

范例:查询以“张”开头的姓名

db.students.find({"name":/^张/});

正则不要加引号了。

范例:查询姓名有“A”的数据,加上i表示不区分大小写

db.students.find({"name":/a/i});
db.students.find({"name":{"$regex":/a/i}});

除了可以单个查询之外,还可以进行数组查询。

范例:查询数组数据中包含语文的数据

db.students.find({"course":{"$regex":/语文/}});

数据排序

通过sort()函数,升序是1,将序-1。1和-1不要加引号。

范例:按照成绩排序,成绩高的排在前面

db.students.find({"course":{"$regex":/语文/}}).sort({"score":-1});

范例:自然排序,按照数据保存的先后顺序排序

db.students.find({"course":{"$regex":/语文/}}).sort({"$natural":-1});

分页显示

两个操作函数 ⏰

skip(n):表示跨过多少数据行

limit(n):表示取出多少行

范例:分页获取数据(第一页,skip(0),limit(5)。第二页,skip(5),limit(5))

db.students.find().skip(5).limit(5);

转载地址:http://kyrzl.baihongyu.com/

你可能感兴趣的文章
ocs的部署与应用(一)
查看>>
Python黑客编程之信息收集
查看>>
Django+ PowerShell 管理AD系统
查看>>
leopard ich7 alc 888 driver
查看>>
开始学习Docker啦--容器理论知识(一)
查看>>
Angular2 小贴士 RouterLink 导航
查看>>
zabbix企业应用之服务器硬件信息监控
查看>>
C语言嵌入式系统编程修炼之道——键盘操作篇
查看>>
Linux下大型容量件的切割与合并
查看>>
流数据库 概率计算概念 - PipelineDB-Probabilistic Data Structures & Algorithms
查看>>
Java注解不完全总结
查看>>
解决“此电脑上没有安装True Speech声音解码器”的方法
查看>>
Win08R2变脸Win7第一招配置Owner信息
查看>>
Powershell管理系列(五)修改AD账号属性
查看>>
远程桌面连接 详细图解
查看>>
http://www.cnblogs.com/speeding/p/3137828.html
查看>>
input 子系统架构总结【转】
查看>>
转帖:解决jquery.js在myeclipse中报错的问题
查看>>
Linux下查看文件和文件夹大小
查看>>
redis总结
查看>>