高级查询
find()
1 查询所有记录
db.users.find()
2 查询name为apple的记录
db.users.find({“name”:”apple”})
3 查询country为china,gender为1的记录
db.users.find({“country”:”china”,” gender”:1})
限制结果集
对应到标准sql, 之前是select * from, 现在需要的是select name from …
1 查询name为apple,并且结果只显示name
db.users.find({“name”:”apple”}, {“name”:true})
---------------------------------------------------------------------------------------------------------------------------
注:后面这个参数{name:true}代表只显示name,如果有一个设置true,那么其他未设置的都是默认false,但是_id字段是默认true的,如果不想显示_id,可以这么写:
db.users.find({“name”:”apple”}, {“name”:true,” _id”:false})
---------------------------------------------------------------------------------------------------------------------------
2 查询所有记录,并且结果只显示name和country
db.users.find(null, {“name”:true, “country”:true, “_id”:false})
findOne()
顾名思义,只显示查询到的第一条记录,类似于select top 1 …
db.users.findOne({“gender”:0})
limit()
类似于sqlserver中的top
db.users.find({“gender”:0}).limit(2);
条件操作符 <, <=, >, >=, !=
$lt 小于 (less than)
$lte 小于等于 (less than equals)
$gt 大于 (greater than)
$gte 大于等于 (greater than equals)
$ne 不等于 (not equals)
查出age大于30的记录
db.users.find({“age”:{$gt:30}})
查出age>=30 且 <=40的记录
db.users.find({“age”:{$gt:30, $lt:40}})
$exists
用于判断字段是否存在,比如我们向users集合里面添加一条记录,只有name属性
db.users.insert({name:”testExists”})
现在我们查出不存在age字段的记录
db.users.find({“age”:{$exists:false}})
查出有age字段但没有gender字段的记录
db.users.find({“age”:{$exists:true},” gender”:{$exists:false}})
null值的处理
需要注意的null与exists的区别
null指的是字段为空或者字段不存在
exists指的是字段是否存在
比较下面两条记录
{“name”:null,” age”:44}
{“age”:45}
如果使用null查询 db.xxx.find({name:null}) 则会查出上面两条记录
但是我们只想找出存在name字段并且其为空的记录,可以这么查询
db.xxx.find({“name”:{$exists:true, $in:[null]}});
$mod
取模,比如我们查询年龄取模10等于1的记录,应该是年龄为1,11,21,…
db.users.find({“age”:{$mod:[10,1]}})
$in & $nin
这个类似于标准sql的in与not in
查询age为23或者24的记录
db.users.find({“age”:{$in:[23, 24]}})
查询age不为23或者24的记录
db.users.find({“age”:{$nin:[23, 24]}})
$not
可以用在任何其他条件之上
db.users.find({$not:{“age”:{$gt:25}}})
$or
查询年龄为32或者name为zhangsan的记录
db.users.find({$or:[{“name”:”zhangsan”}, {“age”:32}]})
数组操作
假设我们有下面两个document
${“name”:”zhangsan”,” booksNumber”:[101, 102, 103]}
${“name”:”lisi”, “booksNumber”:[101, 103]}
$all
db.users.find({“booksNumber”:{$all:[101, 102]}});
那么就能查出第一条记录,它需要满足里面所有的条件
$size
我们需要查询只有booksNumber里面只有两个的记录
db.users.find({“booksNumber”:{$size:2}})
count()
查询总记录数
db.users.find().count()
注:如果我们使用了limit
db.users.find().limit(3).count() 这里是取前三条记录,但是调用count()后还是显示总记录数,如果我们需要返回被限制后的记录数
db.users.find().limit(3).count(true)即可
sort()
这也是个顾名思义的操作,排序: 1 代表升序 -1 代表降序
按名字进行升序排序
db.users.find().sort({name:1})
先按名字升序,再按年龄降序
db.users.find().sort({name:1, age:-1})
distinct()
查询年龄小于等于50所有的name并去除重复
db.users.distinct(“name”, {“age”:{$lte:50}})
skip()
这一特性通常用于分页
跳过三条记录并取之后的三条记录
db.users.find().skip(3).limit(3)
查询内嵌文档
比如要查询这么一条记录:
{ “books”:{“bookid”:100, “bookname”:”english”} }
db.users.find({“books.bookid”:100});
使用正则表达式
使用正则表达式也是mongodb非常强大的特性
比如我们使用正则表达式对name进行过滤
db.users.find({“name”:/^[fc]{1}/})
$where
可以使用javascript代码进行查询,这使得查询几乎能做任何事情
db.users.find({$where:function() {
//this指遍历到的当前的document
//根据return true or false来判断此document是否满足find的条件
if(this.name == “zhangsan”) {
return true;
}
for(var prop in this) {
if(this[prop] == “123”) {
return true;
}
}
return false;
}});
分享到:
相关推荐
高级分布式数据库教程,nosql,mongodb,redis。非常好的分布式教程!
系统的学习MongoDB从入门到进阶,掌握现在火爆的NoSQL技术之一。 选择MongoDB的原因及其优势 MongoDB单机部署、副本集部署、分片部署以及相关操作 MongoDB的客户端连接和常用命令操作 SpringDataMongoDB对MongoDB的...
【学习目标】 1:安装及启动 ...3:高级查询技巧 4:mongodb索引优化 5:mongodb主从副本集(replica set) 6:mongodb分片(sharding) 7:数据导入与导出 8:性能监控与运维管理 9:实战:3台服务器实战亿级短网址项目
本课程是一套关于MongoDB应用开发的实战性教程,名为《深入浅出...学员从中可领会到MongoDB设计的精妙之处,体会到MongoDB强大的类sql查询语言,感受到MongoDB与其它Nosql数据库的异同之处。(教程下载地址在文本里面)
1.分篇章进行学习,内容控制30分钟内 2.1个月疗程,不要放弃治疗哦 3.图文并茂,有问题请发到邮箱
NoSQL与大数据简介、NoSQL的数据一致性、NoSQL的水平扩展与其他基础知识、BigTable与Google云计算原理、Google云计算的开源版本——Hadoop、Dynamo:Amazon的高可用键值对存储、LevelDb——出自Google的Key-Value...
494.3.1 null 494.3.2 正则表达式 504.3.3 查询数组 514.3.4 查询内嵌文档 534.4 $where查询 554.5 游标 564.5.1 limit、skip和sort 574.5.2 避免使用skip略过大量结果 584.5.3 高级查询选项 604....
MongoDB,作为当今流行的NoSQL数据库之一,以其灵活的数据模型和强大的性能,在数据存储和处理领域占据了一席之地。对于开发者而言,掌握MongoDB的基本操作至关重要,它不仅能提升数据处理效率,还能为应用程序带来...
第2章 MongoDB基本原理与安装 2.1 数据库结构 2.2 文档 2.3 集合 2.3.1 集合的无模式 2.3.2 集合的命名 2.4 MongoDB数据类型 2.4.1 基本数据类型 2.4.2 数字类型 2.4.3 日期类型 2.4.4 ...
MongoDB是一个领先的NoSQL数据库,以其灵活的文档型数据模型、简单的安装和高效的操作而闻名。MongoDB的记录是由字段和值对组成的文档,类似于JSON对象,支持不同字段的文档在同一个集合中,以及线上修改数据模式...
其他选项(例如,高级帐户和业务/服务帐户)也是可以在将来实现的现实可能性。目录用户体验目标客户目标我们的主要目标受众是潜在的收养者,例如18岁以上的家庭和个人,以及已经养宠物并且正在寻找产品或服务的人们...
DBA MySQL数据库工程师(2021版)...第13章 NoSQL-MongoDB 第14章 NoSQL-ElasticSearch 第15章 NoSQL-Redis 第16章 服务监控 第17章 Amoeba中间件实战 第18章 MySQL高可用之组复制实战 第19章 NewSQL-TiDB 第20章 测试
第2章 MongoDB基本原理与安装 2.1 数据库结构 2.2 文档 2.3 集合 2.3.1 集合的无模式 2.3.2 集合的命名 2.4 MongoDB数据类型 2.4.1 基本数据类型 2.4.2 数字类型 2.4.3 日期类型 2.4.4 ...
1.分篇章进行学习,内容控制30分钟内 2.1个月疗程,不要放弃治疗哦 3.图文并茂,有问题请发到邮箱
MongoDB作为一个灵活且强大的NoSQL数据库,为开发者提供了丰富的功能和操作选项。通过本文的介绍,相信读者已经对MongoDB的基本操作和常用命令有了较为全面的了解。在实际应用中,建议结合具体需求和数据特点,合理...
项目功能:实现多数据库集成、数据导入更新、高级查询和知识图谱探索。 运行环境:包括Ubuntu 16.04、Windows 11操作系统,Hadoop 2.7.1大数据框架,以及Redis、MongoDB、HBase、Neo4j等NoSQL数据库。 数据集与...
数据库开发人员可将此书作为参考指南,系统管理员可以从本书中找到高级配置技巧,其他用户可以了解一些基本概念和用例。你会发现,将数据组织成自包含的JSON风格的文档比组织成关系型数据库中的记录要容易得多。
如鹏网2019 .NET高级开发就业班,杨中科老师主讲,内容包含Entity Framework、ASP.Net MVC、掌上租项目、.Net Core、Linux、多线程、异步编程、NoSQL(MongoDB、Redis、memcached)、MySql数据库、web api、Docker ...
nosql数据之Mongodb 【javascript基础】 01-javascript的概述.md 02-字面量和变量.md 03-数据类型和typeof操作符.md 04-运算符.md 05-条件判断语句.md 06-循环语句.md 07-数据类型转换基础.md 08-对象.md 09-函数_...
从NoSQL的基础开始,您将在动手案例研究的帮助下学习高级数据操作技术和应用程序开发。 您将学到什么 在云上设置和使用MongoDB Atlas 从MongoDB插入,更新,删除和检索数据 建立聚合管道以执行复杂的查询 使用索引...