1.基本查询
①方法find():查询
db.集合名称.find({条件文档})
②方法findOne():查询,只返回第一个
db.集合名称.findOne({条件文档})
③方法pretty():将结果格式化
db.集合名称.find({条件文档}).pretty()
2.比较运算符
# 等于,默认是等于判断,没有运算符
# 小于,$lt   less-than
# 小于或等于,$lte   less-than,equal
# 大于,$gt    greater-than
# 小于或等于,$gte    greater-than,equal
# 不等于,$ne    not equal  
db.collection2.find({name:'郭靖'})
db.collection2.find({age:{$gte:18}})
3.逻辑运算符
①逻辑与
# 默认是逻辑与的关系
# 例:查询年龄大于或等于18,并且性别为true的学生
db.collection2.find({age:{$gte:18}, gender:true})
②逻辑或
# 使用$or,值为数组,数组中每个元素为json
# 例:查询年龄大于18,或性别为false的学生
db.collection2.find({$or:[{age:{$gt:18}},{gender:false}]})
注意点:find() >> 或条件下的{} >> $or[ ] >>
>>  {条件a},{条件b} >> {域:{ 逻辑符判断} }
③或、与共用
# 例:查询年龄大于18或姓名是郭靖,并且性别为男生
db.collection2.find( {$or:[ {age:{$gt:18} },{name:'郭靖'} ],gender:true} )
4.范围运算符
# $in|$nin
# 例:查询年龄为18,28的学生
db.collection2.find( {age:{$in:[18, 28] } } )
# 这里要注意了,最大与最小都需要表中含有这几个数
5.支持正则表达式
# 使用 // 或 $regex 编写正则表达式
# 例:db.collection2.find( {name:/^黄/} )
db.collection2.find( {name:{$regex:'^黄'} } )
6.自定义查询
# 使用$where后面写一个函数,返回满足条件的数据
# 例:查询大于30岁的学生
db.collection2.find(
{
$where: function(){
return this.age > 18
}})
7.Limit和Skip
①方法limit():读取指定数量的文档
# db.集合名称.find().limit(NUMBER)
db.collection2.find().limit(2)
# 附:如果指定参数则显示集合中的所有文档
②方法skip():用于跳过指定数量的文档
# db.集合名称.find().skip(NUMBER)
db.stu.find().skip(2)
# 附:参数NUMBER表示跳过的记录条数,默认为0
③limit()与skip()一起使用
# 不分先后顺序;跳过指定数量文档,再读取指定数量的文档
# 查询数据
db.collection1.find().limit(4).skip(5)
db.collection1.find().skip(5).limit(4)
8.投影
--选择字段显示数据
# ①db.集合名称.find({},{ 字段名称:1, ...})
db.collection2.find({},{name:1, gender:1})
# '1':表示显示字段,不设置表示不显示
# ②特殊:对于_id列默认是显示的,
# 如果不显示需要明确设置为0
db.collection2.find({},{_id:0,name:1,gender:1})
9.排序
--对结果集进行排序
参数1为升序排列
参数-1位降序排列
# db.集合名称.find().sort({字段:1....})
# --根据性别降序,再根据年龄升序
db.collection2.find().sort({gender:-1,age:1})
10.统计个数
①方法count():用于统计结果集中文档条数
1.db.集合名称.find({条件}).count()
db.collection2.find({gender:true}).count()
# --统计男生人数 2.db.集合名称.count({条件})
db.collection2.count({age:{$gt:20}, gender:true})
# --统计年龄大于20的男生人数
11.消除重复
①方法distinct():对字段数据进行去重,提取
--db.集合名称.distinct('去重字段',{条件})
db.collection2.distinct('hometown',{age:{$gt:18}})
# 查询年龄大于18岁的学生,来自哪些省份 # 4.聚合查询
1.基本语法
--语法
db.集合名称.aggregate( {管道: {表达式} } )
附:
1.管道:在Unix和Linux中一般用于将当前命令的
输出结果作为下一个命令的输入
2.表达式:处理输入文档并输出
2.常用表达式
$sum: 计算综合,$sum:1 表示以一倍计数
$avg: 计算平均值
$min: 获取最小值
$max: 获取最大值
$push: 在结果文档中插入值到第一个文档数据
$first: 根据资源文档的排序获取第一个文档数据
$last: 根据资源文档的排序获取最后一个文档数据
3.常用管道
①$group
--将集合中的文档分组,可用于统计结果
--_id表示分组的依据,使用某个字段的格式为'$字段'
# 统计男生、女生的总人数
db.stu.aggregate(
    {$group:
        {
            _id:'$gender',
            counter:{$sum:1}
        }
    }
)
--透视数据
# 统计学生性别及学生姓名
db.stu.aggregate(
    {$group:
        {
            _id:'$gender',
            name:{$push:'$name'}
        }
    }
)
--使用$$ROOT可以将文档内容加入到结果集的数组中
db.stu.aggregate(
    {$group:
        {
            _id:'$gender',
            name:{$push:'$$ROOT'}
        }
    }
)
②$match
--修改输入文档的结构,如重命名、增加、删除字段、创建计算结果
--用于过滤数据,只输出符合条件的文档
--使用MongoDB的标准查询操作
# 查询年龄大于20的学生
db.stu.aggregate(
    {$match:{age:{$gt:20}}}
) # 查询年龄大于20的男生、女生人数
db.stu.aggregate(
    {$match:{age:{$gt:20}}},
    {$group:{_id:'$gender',counter:{$sum:1}}}
)
③$project
--修改输入文档的结构,
   如重命名、增加、删除字段、创建计算结果
# 查询学生的姓名、年龄
db.stu.aggregate(
    {$project:{_id:0,name:1,age:1}}
) # 查询男生、女生人数,输出人数
db.stu.aggregate(
    {$group:{_id:'$gender',counter:{$sum:1}}},
    {$project:{_id:0,counter:1}}
)
④$sort
--将输入文档排序后输出
# 查询学生信息,按年龄升序
b.stu.aggregate({$sort:{age:1}}) # 查询男生、女生人数,按人数降序
db.stu.aggregate(
    {$group:{_id:'$gender',counter:{$sum:1}}},
    {$sort:{counter:-1}}
)
⑤$limit和$skip
--$limit
# 限制聚合管道返回的文档数
# 查询2条学生信息
db.stu.aggregate({$limit:2}) --$skip
# 跳过指定数量的文档,并返回余下的文档
# 查询从第3条开始的学生信息
db.stu.aggregate({$skip:2}) # 统计男生,女生人数,按人数升序,取第2条数据
db.stu.aggregate(
    {$group:{_id:'$gender', counter:{$sum:1}}}
    {$sort:{counter:1}}
    {$skip:1}
    {$limit:1}
)
⑥$unwind字段拆分查询
--语法
--文档中一个数组字段含有多个值
--根据字段下的值拆分多条
--每条包含数组中的一个值
   
--db.集合名称.aggregate({$unwind:'$字段名称'})
# $unwind聚合方法下含有两个属性:
    path:'$字段名称'
    preserveNullAndEmptyArrays:<布尔值>
# 不填写属性,默认表示<布尔值>为false
# 且不用标记属性名
--构造数据
db.t3.insert([
{ "_id" : 1, "item" : "a", "size": [ "S", "M", "L"] },
{ "_id" : 2, "item" : "b", "size" : [ ] },
{ "_id" : 3, "item" : "c", "size": "M" },
{ "_id" : 4, "item" : "d" },
{ "_id" : 5, "item" : "e", "size" : null }
])
--查看查询结果,显示对空数组,无字段,null的文档
db.t3.aggregate( { $unwind:{ path:'$size', preserveNullAndEmptArrays:true}}) --查看查询结果,不显示空数组,无字段,null的文档
db.t3.aggregate({$unwind: '$size'})  相当于:
db.t3.aggregate({$unwind:{path:'$size', preserveNullAndEmptyArrays:false}})

03 - Mongodb数据查询 | Mongodb的更多相关文章

  1. MongoDB数据查询 --MongoDB

    1.插入测试数据 use flower db.goods.insert({'goods_name':'Hyacinth',price:10,num:800}) db.goods.insert({goo ...

  2. MongoDB 数据查询

    数据查询 基本查询 方法find():查询 db.集合名称.find({条件文档}) 方法findOne():查询,只返回第一个 db.集合名称.findOne({条件文档}) 方法pretty(): ...

  3. MongoDB数据查询详解

    查询全部 ​ db.infos.find(); db.infos.find({"url":"www.baidu.com"}); id不要显示出来 db.info ...

  4. MongoDB数据查询

    启动MongoDB:sudo service mongodb start,mongo 经测试,键可加引号也可不加,但是值一般要加引号,数值类型除外 MongoDB区分大小写,命名通常采用驼峰式命名法 ...

  5. 4.Mongodb数据查询2

    1.limit &skip (1)Limit 方法limit():用于读取指定数量的文档 语法: db.集合名称.find().limit(NUMBER) 参数NUMBER表示要获取文档的条数 ...

  6. 3 Mongodb数据查询1

    1.基本查询 方法find():查询 db.集合名称.find({条件文档}) 方法findOne():查询,只返回第一个 db.集合名称.findOne({条件文档}) 方法pretty():将结果 ...

  7. MongoDB 数据建模

    版权所有,未经许可,禁止转载 章节 MongoDB 入门 MongoDB 优势 MongoDB 安装 MongoDB 数据建模 MongoDB 创建数据库 MongoDB 删除数据库 MongoDB ...

  8. mongodb,robomongo 数据查询

    可视化管理工具:Robomongo 是开源,免费的MongoDB管理工具,下载地址:Robomongo下载 1.  基本查询:    构造查询数据.    > db.test.findOne() ...

  9. MongoDB数据访问[C#]附源码下载(查询增删改) 转载

    安装完MongoDBhttp://localhost:28017/监测是否成功! vs 2008 C# MongoDB 源代码下载地址:http://download.csdn.net/source/ ...

随机推荐

  1. 错误Uncaught Error: Bootstrap's JavaScript requires jQuery at bootstrap.min.js:6 错误详解

    引入Bootstrap的顺序进行修改 <% //获取以/开始,不以/结尾的部分 pageContext.setAttribute("APP_PATH", request.ge ...

  2. 整理了一份比较全面的PHP开发编码规范.

    这些年来多从事Linux下PHP和C相关的开发,带过很多项目和团队,下面是根据经验整理的PHP编码规范,可以用作给大家的范例和参考,根据需要进行取舍和修改! (可能最新的一些php5的规范不够完整,今 ...

  3. Cobbler安装报错--dhcpd -t failed Exception occured: <class 'cobbler.cexceptions.CX'>

    最近想玩一下自动化安装,就研究了一下cobbler,测试环境本来是想用CentOS6.X的,但是后来一想,还是想用CentOS7.X.然后就碰到坑了. 在同步cobbler配置的时候,发现了以下错误: ...

  4. Freemarker使用总结

    spring mvc 中 Freemarker 获取项目根目录,方便HTML页面配置各种路径 在SpringMVC框架中使用Freemarker试图时,要获取根路径的方式如下: <!-- Fre ...

  5. 找回Firefox4的状态栏!Status-4-Evar扩展

    Status-4-Evar这个扩展能让Firefox4故意移除的状态栏给找回来!官方下载地址为:https://addons.mozilla.org/zh-CN/firefox/addon/23528 ...

  6. ffmpeg学习笔记-Linux下编译Android动态库

    Android平台要使用ffmpeg就需要编译生成动态库,这里采用Ubuntu编译Android动态库 文件准备 要编译生成Android需要以下文件 NDK ffmpeg源代码 NDK下载 NDK可 ...

  7. JAVA计算字符串UTF-8字节数

    String str = "C++/C#/JAVA软件开发"; try { System.out.println(str.getBytes("UTF-8").l ...

  8. Vue中ESlint配置文件.eslintrc文件

    很久没有分享和更新过了 今天就给大家分享一篇 Vue中ESlint配置文件.eslintrc文件详解吧 ------------------------------------------------ ...

  9. Java总复习内容

    StringBuffer定义时需要用正确的方式 例如: StringBuffer xxx = new StringBuffer("雯雯是猪"); 使用StringBuffer的连接 ...

  10. 主成分分析(PCA)与线性判别分析(LDA)

    主成分分析 线性.非监督.全局的降维算法 PCA最大方差理论 出发点:在信号处理领域,信号具有较大方差,噪声具有较小方差 目标:最大化投影方差,让数据在主投影方向上方差最大 PCA的求解方法: 对样本 ...