MongoDB数据查询详解

本文涉及的产品
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

查询全部 ​

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]}});

范围查询

$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":"音乐"})

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

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

范例:返回年龄为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);



本文转自TBHacker博客园博客,原文链接:http://www.cnblogs.com/jiqing9006/p/7856279.html,如需转载请自行联系原作者
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
相关文章
|
NoSQL MongoDB
12 MongoDB - 数据查询(消除重复)
12 MongoDB - 数据查询(消除重复)
228 0
|
NoSQL MongoDB
11 MongoDB - 数据查询(统计个数)
11 MongoDB - 数据查询(统计个数)
843 0
|
5月前
|
数据采集 监控 NoSQL
MongoDB 正则表达式详解:高效数据查询与处理技巧
MongoDB 正则表达式详解:高效数据查询与处理技巧
123 0
|
NoSQL MongoDB
10 MongoDB - 数据查询(排序)
10 MongoDB - 数据查询(排序)
56 0
|
NoSQL MongoDB
09 MongoDB - 数据查询(投影)
09 MongoDB - 数据查询(投影)
57 0
|
NoSQL MongoDB
08 MongoDB - 数据查询(Limit 与 Skip)
08 MongoDB - 数据查询(Limit 与 Skip)
75 0
|
NoSQL MongoDB
07 MongoDB - 数据查询
07 MongoDB - 数据查询
49 0
|
SQL JavaScript NoSQL
MongoDB数据查询
1、find函数的介绍和使用 MongoDB数据查询使用find函数,其功能与SQL中的select函数相同,可提供与关系型数据库类似的许多功能,包括映射、排序等。 db.集合名.find(query,fields,limit,skip) query指查询条件,相当于SQL中的where语句。 例如: db.student.find({name:"joe","age"
1669 0
|
1月前
|
存储 关系型数据库 MySQL
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB区别,适用场景
一个项目用5款数据库?MySQL、PostgreSQL、ClickHouse、MongoDB——特点、性能、扩展性、安全性、适用场景比较
|
12天前
|
NoSQL Cloud Native atlas
探索云原生数据库:MongoDB Atlas 的实践与思考
【10月更文挑战第21天】本文探讨了MongoDB Atlas的核心特性、实践应用及对云原生数据库未来的思考。MongoDB Atlas作为MongoDB的云原生版本,提供全球分布式、完全托管、弹性伸缩和安全合规等优势,支持快速部署、数据全球化、自动化运维和灵活定价。文章还讨论了云原生数据库的未来趋势,如架构灵活性、智能化运维和混合云支持,并分享了实施MongoDB Atlas的最佳实践。