- aggregate分组聚合
user_list
{
"_id" : ObjectId("5c3841619b0094fd47a06512"),
"name" : "22",
"sex" : "女",
"age" : 20,
"create_time" : "2019-01-11 15:09:59"
}
针对时间的存储问题,按照日期来分组查询满足条件的数据,需要对时间进行格式化的处理。
db.getCollection("user_list").aggregate(
//查询条件
{ $match: { name: '小李' } },
//字段重新处理,增加额外需要的字段并赋值
{ $project: {
"year": {"$substr": ["$create_time", 0, 4] },
"month": { "$substr": ["$create_time", 5, 2] },
"day":{"$substr": ["$create_time", 8, 2] }
} },
{ $group: {
_id:{year:"$year",month:"$month",day:"$day"},
total: { $sum: 1 }
} }
)
- group多个分组条件同时查询
db.getCollection("user_list").group(
{
//查询条件
keyf:function(doc){
return {
"create_date":doc.create_time.substr(0,4)+"-"+
doc.create_time.substr(5,2)+"-"+doc.create_time.substr(8,2)
};
},
//初始化数据
initial: {"boy":0,"girl":0},
//数据处理函数(根据自己的需求来处理)
reduce:function Reduce(doc,out){
if(doc.sex==='男'){
out.boy++
}else{
out.girl++
}
}
}
)
后续继续完善