先进行过滤,再分组
1、实例:
代码语言:javascript复制db.getCollection('UpMsgItem').aggregate(
[
{$match : {
createTime : {$gt : 1513568964539, $lte : 1516160964542 },
wxAppId : "wx8bd8a617c9ae66ed" }},
{$group : {_id : "$wxOpenId"}}
])
2、解释:
match进行过滤,这里利用createTime、wxAppId两个字段进行过滤。过滤之后的数据,根据_id进行分组。$group对应的值就是分组以后返回的数据,可以在里面进行聚合操作。
多个字段进行分组
1、实例:
代码语言:javascript复制db.getCollection('UpMsgItem').aggregate(
[
{$match : {
createTime : {$gt : 1519613221561, $lte : 1519699621562 }}},
{
$group : {"_id": { "wxOpenId" : "$wxOpenId", "wxAppId": "$wxAppId"}}
}
])
计算分组以后的记录数:
1、实例:
代码语言:javascript复制 db.getCollection('UpMsgItem').aggregate(
[
{$match : {
createTime : {$gt : 1507508412000, $lte : 1522881012000 }}},
{
$group : {"_id": { "wxOpenId" : "$wxOpenId", "wxAppId": "$wxAppId"}}
}
]).map(function(record, index){
print(index);
});
先过滤,在进行分组、聚合操作:
1、实例:
代码语言:javascript复制db.getCollection('UpMsgItem').aggregate(
[
{$match : {
createTime : {$gt : 1513568964539, $lte : 1516160964542 },
wxAppId : "wx8bd8a617c9ae66ed" }},
{$group : {_id : "$wxOpenId", sumCreateTime: {$sum: "$createTime"}}}
])
2、解释:
这里的sumCreateTime就是聚合后的结果,对createTime字段进行聚合。
group聚合操作:
$group:可以对分组的数据执行如下的表达式计算:
代码语言:javascript复制 $sum:计算总和。
$avg:计算平均值。
$min:根据分组,获取集合中所有文档对应值得最小值。
$max:根据分组,获取集合中所有文档对应值得最大值。
$push:将指定的表达式的值添加到一个数组中。
$addToSet:将表达式的值添加到一个集合中(无重复值)。
$first:返回每组第一个文档,如果有排序,按照排序,如果没有按照默认的存储的顺序的第一个文档。
$last:返回每组最后一个文档,如果有排序,按照排序,如果没有按照默认的存储的顺序的最后个文档。
同时使用大于、小于查询
代码语言:javascript复制db.getCollection('UpMsgItem').find({
"createTime" : {$gt : 1519556225560, $lt : 1519642625562},
"ea" : '2'
}).count();
查看字段是否存在
代码语言:javascript复制db.getCollection('log_original').find({
exception : { $exists: true }})
两个字段之间比较
代码语言:javascript复制{ $where : "this.updateTime > this.createTime"}
与操作:
代码语言:javascript复制db.getCollection('DownMsgItem').find({createTime : {$lte :1528646400000, $gte : 1529251200000}})
增加索引
db.getCollection('customer_evaluation_statistics').ensureIndex({"fsEa":1, "appId":1, "createTime" : 1})
注意点
1、mongo的update、findAndModify操作,如果没有set字段,会进行全量覆盖
参考:
http://blog.csdn.net/congcong...