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. LC 987. Vertical Order Traversal of a Binary Tree

    Given a binary tree, return the vertical order traversal of its nodes values. For each node at posit ...

  2. Kotlin中反射

    枚举类成员 import kotlin.reflect.full.memberFunctions import kotlin.reflect.full.memberProperties fun mai ...

  3. linux中read,write和recv,send的区别

    linux中read,write和recv,send的区别 1.recv和send函数提供了和read和write差不多的功能.但是他们提供了第四个参数来控制读写操作. int recv(int so ...

  4. python3 __mian和__name__的区别

    1.新建 test.py 模块: def GetModuleName(): print('__name__ = ', __name__) def PrintName(): print('PrintNa ...

  5. windows进入指定目录

    1.进入cmd 2.输入盘符比如:E: 3.切换目录 cd E:\progect\Firstdjango 实例:

  6. k8s install kubeadm网络原因访问不了谷哥and gpg: no valid OpenPGP data found. 解决办法

    gpg: no valid OpenPGP data found. 解决办法 待做.................................... 卡助在这curl -s https://pa ...

  7. GBDT详解例子

    https://blog.csdn.net/zpalyq110/article/details/79527653

  8. oracle数据库可视化工具

    1.TreeSoft基于web网页方式,管理维护oracle数据,功能包括:SQL在线执行,数据在线维护管理,数据导出,数据交换同步等. 支持MySQL,Oracle,DB2,PostgreSQL,S ...

  9. Python-OpenCV实现二值图像孔洞填充

    代码如下: import cv2 import numpy as np def FillHole(mask): contours, hierarchy = cv2.findContours(mask, ...

  10. 【编程开发】opencv实现对Mat中某一列或某一行的元素进行normalization

    [编程开发]opencv实现对Mat中某一列或某一行的元素进行normalization 标签: [编程开发] [机器学习] 声明:引用请注明出处http://blog.csdn.net/lg1259 ...