• MongoDB学习之路(五)


    MongoDB $type 操作符

    类型 数字 备注
    Double 1
    String 2
    Object 3
    Array 4
    Binary data 5
    Undefined 6 已废弃
    Object id 7
    Boolean 8
    Date 9
    Null 10
    Regular Expression 11
    JavaScript 13
    Symbol 14
    JavaScript(with scope) 15
    32-bit Integer 16
    Timestamp 17
    64-bit Integer 18
    Min key 255 Query with -1
    Max key 127

    实例:
    获取title为String的数据

    >db.col.find({"title": {$type : 2)}});

    MongoDB Limit与Skip方法

    MongoDB Limit()方法

    limit()方法接受一个数字参数,意为从数据记录中读取指定个数的记录条数。

    语法

    >db.col.find().limit(NUMBER);

    MongoDB Skip()方法

    skip()方法可以用来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。

    Tips:

    1. db.col.find({}, {"title": 1, _id: 0}).limit(2)
      • 第一个{}放where条件,为空表示返回集合中所有文档。
      • 第二个{}指定哪些列显示和不显示(0表示不显示1表示显示)
    2. 想要读取从10条记录后的100条记录,相当于sql中limit(10,100)
      • db.col.find().skip(10).limit(100)
      • skip和limit结合就能实现分页
    3. 当查询时同时使用sort,skip,limit, 无论位置先后,最先执行顺序为先sort再skip再limit。

    MongoDB排序

    MongoDB sort()方法

    在MongoDB中使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序字段,并使用1和-1来指定排序的方式,其中1为升序排列,而-1是用于降序排列。

    语法:

    >db.col.find().sort({KEY:1});

    For Instance

    >db.col.find({}, {"title":1, _id:0}.sort({"likes": -1});
    

    上述是选取所有的记录,只显示title,并且按照likes的大小降序排列。

    MongoDB 索引

    索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件,并且选取那些符合条件的记录。

    索引是一种特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构。

    ensureIndex()方法

    MongoDB使用ensureIndex()方法来创建索引。

    语法:

    >db.col.ensureIndex({KEY:1});

    上述语法中KEY值为你要创建的索引字段,1为指定按升序创建索引,-1为指定降序来创建索引。

    For Instance

    >db.col.ensureIndex({"title":1});

    同时,ensureIndex()方法中你也可以设置使用多个字段创建索引。(关系型数据库中称为复合索引)

    >db.col.ensureIndex({"title":1, "description": -1});

    ensureIndex()接受可选参数,可选参数列表如下:

    参数 类型 描述
    background Boolean 建索引过程会阻塞其他数据库操作,background可指定以后台方式创建索引,即增加"background"可选参数。"background"默认值为false
    unique Boolean 建立的索引是否唯一。指定为true创建唯一索引。默认值为false
    name String 索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排列顺序生成一个索引名称
    dropDups Boolean 在建立唯一索引时是否删除重复记录,指定true创建唯一索引。默认值为false
    sparse Boolean 对文档中不存在的字段数据不启用索引;这个参数需要特别注意,如果设置为true,在索引字段中不会查询出不包含对应字段的文档。默认值为false
    expireAfterSeconds integer 指定一个以秒为单位的数值,完成TTL设定,设定集合的生存时间。
    v index version 索引的版本号。默认的索引版本取决于mongod创建索引时运行的版本
    weights document 索引权重值,数值在1到99999之间,表示该索引相对于其他索引字段的得分权重
    default_language String 对于文本索引,该参数决定了停用词及词干和词器的规则列表。默认为英语
    language_override String 对于文本索引,该参数指定了包含在文档中的字段名,语言覆盖默认的language,默认值为language

    For Instance

    在后台创建索引:

    >db.col.ensureIndex({ open: 1, close: 1}, {background: true});

    MongoDB聚合

    MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。类似于sql语句中的count(*)。

    aggregate()方法

    MongoDB中聚合的方法使用aggreagte()。

    语法:

    >db.col.aggregate(AGGREGATE_OPERATION);

    通过一个官方文档中的图片来讲解该函数

    图片来自:https://docs.mongodb.com/manual/aggregation/

    下表展示了一些聚合表达式

    表达式 描述
    $sum 计算总和
    $avg 计算平均值
    $min 获取集合中所有文档对应值的最小值
    $max 获取集合中所有文档对应值的最大值
    $push 在结果文档中插入值到一个数组中
    $addToSet 在结果文档中插入值到一个数组中,但不能创建副本
    $first 根据资源文档的排序获取第一个文档数据
    $last 根据资源文档的排序获取最后一个文档数据

    管道Pipeline

    和Unix、Linux中类似,一般用于将当前命令的输出结果作为下一个命令的参数。

    MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。并且管道的操作可以重复的。

    几种常用的方法:

    • $project:修改输入文档结构。可用重命名、删除或增加域。
    • $match:用于过滤数据。上面图片中有具体实例
    • $limit:用来限制返回的数量。
    • $skip:跳过指定文档数量
    • $group:将集合中的文档分组,可用于统计结果
    • $sort:将输入文档排序后输出。
    >db.article.aggregate(
    	{ $project: {
    		title: 1, 
    		author : 1,
    		}
    	}
    );
    

    通过上述修改,结果中就只有_id,title和author三个字段了。默认情况下_id字段是被包含的。如果不包含可以使用下述代码

    >db.article.aggregate(
    	{ $project : {
    		_id : 0,
    		title: 1,
    		author: 1
    		}
    	}
    );
    

    skip实例

    >db.article.aggregate(
    	{ $skip: 5}
    );
    

    经过$skip管道操作符处理后,前五个文档会被"过滤"掉。

  • 相关阅读:
    【NOIP16提高组】换教室
    【扬中集训Day6T1】 白日梦
    【POJ 1061】 青蛙的约会
    【扬中集训DAY5T1】 交换矩阵
    【USACO】 Balanced Photo
    【USACO】 Balanced Lineup

    POJ P3352 Road Construction 解题报告
    洛谷 P2783 有机化学之神偶尔会做作弊 解题报告
    洛谷 P2300 合并神犇 解题报告
  • 原文地址:https://www.cnblogs.com/chunzhulovefeiyue/p/7249208.html
Copyright © 2020-2023  润新知