一、操作符
$gt ——– greater than >
$gte ——— gt equal >=
$lt ——– less than <
$lte ——— lt equal <=
$ne ———– not equal !=
$eq ——– equal =
例如:
db.col.find({likes : {$lte : 150}})
查找col中小于等于150的文档
类似sql语句:
Select * from col where likes <= 150;
获取”col”集合中 “likes” 大于100,小于 200 的数据:
db.col.find({likes : {$lt :200, $gt : 100}})
类似sql:
Select * from col where likes>100 AND likes<200;
二、$type操作符
$type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果。
MongoDB 中可以使用的类型如下表所示:
例如,获取 “col” 集合中 title 为 String 的数据:
db.col.find({"title" : {$type : 2}})
三、 Limit与Skip方法
1. limit()方法接受一个数字参数,该参数指定从MongoDB中读取的记录条数。
db.COLLECTION_NAME.find().limit(NUMBER)
如果没有指定limit()方法中的参数则显示集合中的所有数据。
2. skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
skip()方法默认参数为 0
读取从 10 条记录后 100 条记录,相当于 sql 中limit (10,100)。
db.COLLECTION_NAME.find().skip(10).limit(100)
skip和limit方法只适合小数据量分页,如果是百万级效率就会非常低,因为skip方法是一条条数据数过去的,建议使用where_limit。也就是说,如果能附带上这样的条件那查询效率就会提高
db.test.find({amount:{$gt:2399927}}).sort({“amount”:1}).limit(10) //53ms
当查询时同时使用sort,skip,limit,无论位置先后,最先执行顺序 sort再skip再limit。
四、MongoDB 排序
sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
db.COLLECTION_NAME.find().sort({KEY:1})
第一个大括号:where条件;
第二个大括号1:显示,0:不显示;’
降序排列;
skip(), limilt(), sort()三个放在一起执行的时候,执行的顺序是先 sort(), 然后是 skip(),最后是显示的 limit()。
五、索引
索引通常能够极大的提高查询的效率,如果没有索引,MongoDB在读取数据时必须扫描集合中的每个文件并选取那些符合查询条件的记录。
这种扫描全集合的查询效率是非常低的,特别在处理大量的数据时,查询可以要花费几十秒甚至几分钟,这对网站的性能是非常致命的。
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
db.COLLECTION_NAME.ensureIndex({KEY:1})
ensureIndex() 方法中你也可以设置使用多个字段创建索引(关系型数据库中称作复合索引)。
通过在创建索引时加background:true 的选项,让创建工作在后台执行
db.values.ensureIndex({open: 1, close: 1}, {background: true})
六、聚合
聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的 count(*)。
db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
计算每个作者所写的文章数,使用aggregate()计算结果如下:
db.mycol.aggregate([{$group : {_id : "$by_user",num_tutorial : {$sum : 1}}}])
聚合表达式:
管道
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
这里我们介绍一下聚合框架中常用的几个操作:
- $project:修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
- match:用于过滤数据,只输出符合条件的文档。 match使用MongoDB的标准查询操作。
- $limit:用来限制MongoDB聚合管道返回的文档数。
- $skip:在聚合管道中跳过指定数量的文档,并返回余下的文档。
- $unwind:将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
- $group:将集合中的文档分组,可用于统计结果。
- $sort:将输入文档排序后输出。
$geoNear:输出接近某一地理位置的有序文档。
$project实例
db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);