MongoDB 数据库登录终端后,进行数据查询时的一些筛选方法。
一、条件操作符
MongoDB 数据库库查询时,使用到的条件操作符。
$gt (>) 大于
$lt (
$gte (>=) 大于等于
$lte (<= ) 小于等于
例子:
db.testtable.find({age : {$gt : 22}})
db.testtable.find({age : {$lte : 19}})
$all匹配所有
db.users.find({like_code:{$all:[6,8]}})
#条件必须全部满足[6,8]
$exists字段是否存在
db.users.find({addr:{$exists:false}})
#不存在地址
Null值处理
db.user.find({addr:{“$in”:[null],”$exists”:true}})
#字段必须存在,数值为NULL
$mod取模运算
db.user.find({age:{$mod:[6,1]}})
#年龄对6取模等于1
$ne不等于
db.user.find({age:{$ne:3}})
#不等于3
$in包括
db.user.find({age:{$in:[7,8]}})
#和mysql中in相同
$nin不包含
$size数组元素个数
db.user.find({my_like:{$size:2}})
#my_like数组中有两个元素的
正则匹配
db.user.find({name:{$not:/^B.*/}})
#名字不以B开头的
二、MongoDB 数据库操作方法
文档数量count()
匹配文档的数量
db.COLLECTION_NAME.find({age:2}).count()
排序sort() sort方法接受对象或者数组,使用{“fidle”:”1″}设置。
其中 1 为升序排序,而-1是用于降序排列
db.COLLECTION_NAME.find().sort({KEY:1})
限定数量limit
limit方法接受一个数字作为参数。
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
跳过一定数量skip
skip方法接受一个数字作为参数
db.COLLECTION_NAME.find().limit(NUMBER).skip(NUMBER)
三、聚合器 aggregate
用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。
3.1、聚合器的操作符
$sum 计算总和。
db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$sum : “$likes”}}}])
$avg 计算平均值
db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$avg : “$likes”}}}])
$min 获取集合中所有文档对应值得最小值。
db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$min : “$likes”}}}])
$max 获取集合中所有文档对应值得最大值。
db.mycol.aggregate([{$group : {_id : “$by_user”, num_tutorial : {$max : “$likes”}}}])
$push 在结果文档中插入值到一个数组中。
db.mycol.aggregate([{$group : {_id : “$by_user”, url : {$push: “$url”}}}])
$addToSet 在结果文档中插入值到一个数组中,但不创建副本。
db.mycol.aggregate([{$group : {_id : “$by_user”, url : {$addToSet : “$url”}}}])
$first 根据资源文档的排序获取第一个文档数据。
db.mycol.aggregate([{$group : {_id : “$by_user”, first_url : {$first : “$url”}}}])
$last 根据资源文档的排序获取最后一个文档数据
db.mycol.aggregate([{$group : {_id : “$by_user”, last_url : {$last : “$url”}}}])
3.2、聚合器的方法
$project:
修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。
$match:
用于过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。
$limit:
用来限制MongoDB聚合管道返回的文档数。
$skip:
在聚合管道中跳过指定数量的文档,并返回余下的文档。
$unwind:
将文档中的某一个数组类型字段拆分成多条,每条包含数组中的一个值。
$group:
将集合中的文档分组,可用于统计结果。
$sort:
将输入文档排序后输出。
$geoNear:
输出接近某一地理位置的有序文档。
四、聚合方法实例
4.1、$project实例
db.article.aggregate(
{ $project : {
title : 1 ,
author : 1 ,
}}
);
这样的话结果中就只还有_id,tilte和author三个字段了,默认情况下_id字段是被包含的,如果要想不包含_id话可以这样:
db.article.aggregate(
{ $project : {
_id : 0 ,
title : 1 ,
author : 1
}});
4.2.$match实例
db.articles.aggregate( [
{ $match : { score : { $gt : 70, $lte : 90 } } },
{ $group: { _id: null, count: { $sum: 1 } } }
] );
$match用于获取分数大于70小于或等于90记录,然后将符合条件的记录送到下一阶段$group管道操作符进行处理。
4.3.$skip实例
db.article.aggregate(
{ $skip : 5 });
经过$skip管道操作符处理后,前五个文档被”过滤”掉。
五、Map Reduce计算模型
使用 MapReduce 要实现两个函数 Map 函数和 Reduce 函数,Map 函数调用 emit(key, value), 遍历 collection 中所有的记录, 将 key 与 value 传递给 Reduce 函数进行处理。
5.1、Map 函数
Map 函数必须调用 emit(key, value) 返回键值对。
5.2、Reduce 函数
reduce 统计函数reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value。。out 统计结果存放集合(不指定则使用临时集合,在客户端断开后自动删除)。query 一个筛选条件只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)sort 排序和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制limit 返回数发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)
map 映射函数
(生成键值对序列,作为 reduce 函数参数)。
reduce 统计函数
reduce函数的任务就是将key-values变成key-value,也就是把values数组变成一个单一的值value
out 统计结果存放集合
(不指定则使用临时集合,在客户端断开后自动删除)。
query 一个筛选条件
只有满足条件的文档才会调用map函数。(query。limit,sort可以随意组合)
sort 排序
和limit结合的sort排序参数(也是在发往map函数前给文档排序),可以优化分组机制
limit 返回数
发往map函数的文档数量的上限(要是没有limit,单独使用sort的用处不大)