MongoDB 常用语句
2016-11-30 11:09
176 查看
记录一下自己用到的MongoDB的语句,说实话,这东西时间一久,不常用的话,就都忘记了.
1 存在就更新,不存在就插入 $setOnInsert (根据id和日期更新数据,如果存在则更新,不存在符合条件的插入)
2 mongoTemplate 查询统计符合时间范围内的数据,并去重某个字段后的数量.
3 mongo aggregate 聚合管道分组查询:根据advId广告id分组查询, 查询符合时间范围内的,广告id=[固定值]的,带分页的查询.
mongo 原生语句:
db.dayCollect.aggregate([
{
$match: {date:{$gt:"2016-12-04",$lte: "2016-12-11"}}
},
{
$match: {advId:{$in:["2","36"]}}
}
, {$group : {_id : "$advId", playTimes : {$sum : "$playTimes"}}}
,{$sort:{_id:1}}
,{$skip:0},
{$limit:10}
]);
mongoTemplate java查询
AggregationOutput aggregationOutput=null;
//根据具体时间获取一周的时间段,具体到天
String[] timeInterval = getTimeInterval(date);
DBObject datematch = (DBObject) JSON.parse("{$match: {date:{$gt:\""+timeInterval[0]+"\",$lte: \""+timeInterval[1]+"\"}}}");
DBObject group = (DBObject) JSON.parse("{$group : {_id : \"$advId\", playTimes : {$sum : \"$playTimes\"}}}");
DBObject sort = (DBObject) JSON.parse("{$sort:{_id:-1}");
DBObject skip = (DBObject) JSON.parse("{$skip:"+pageView.getStartPage()+"}");
DBObject limit = (DBObject) JSON.parse("{$limit:"+pageView.getPageSize()+"}");
if(!StringUtils.isEmpty(advIds)){
String[] split = advIds.split(",");
DBObject advIdmatch = (DBObject) JSON.parse("{$match: {advId:{$in:["+split+"]}}}");
aggregationOutput = mongoTemplate.getCollection(DAY_COLLECT).aggregate(datematch, advIdmatch,group,sort,skip,limit);
}else{
aggregationOutput = mongoTemplate.getCollection(DAY_COLLECT).aggregate(datematch, group,sort,skip,limit);
}
Iterable<DBObject> output = aggregationOutput.results();
List<WeekConllect> weekList = new ArrayList<WeekConllect>();
for (DBObject obj : output) {
BasicDBObject obj2 = (BasicDBObject) obj;
WeekConllect conllect =new WeekConllect();
conllect.setAdvId(obj2.getString("_id"));
conllect.setPlayTimes(obj2.getString("playTimes"));
weekList.add(conllect);
}
4 按照一天的 24小时分组统计某些数据,因为我的时间是用字符串存储的,所以只能用截取这么玩了
无痛破处
1 存在就更新,不存在就插入 $setOnInsert (根据id和日期更新数据,如果存在则更新,不存在符合条件的插入)
db.dayCollect.update({"advId":"333333333","date":"2016-11-29"},{$setOnInsert: {"name":"mingzi","shopName":"mingzi","areaName":"mingzi","itemName":"mingzi","deviceNum":0,},$inc: {playTimes:3}},{upsert:true}) 换成Template写法为: Query query = Query.query(where("advId").is("333333333").and("date").is("2016-11-29")); mongoTemplate.upsert(query, new Update().inc("playTimes", 2).set("name", "mingzi").set("shopName", "mingzi").set("areaName", "mingzi").set("itemName", "mingzi").set("deviceNum", 0), "dayCollect");
2 mongoTemplate 查询统计符合时间范围内的数据,并去重某个字段后的数量.
Query query =Query.query(Criteria.where("advId").is("1").andOperator(Criteria.where("playTime").gte(todayFormat).lt(tomorrowFormat))); long count = mongoTemplate.getCollection(advPlay_COLLECTION).distinct("deviceCode", query.getQueryObject()).size();
3 mongo aggregate 聚合管道分组查询:根据advId广告id分组查询, 查询符合时间范围内的,广告id=[固定值]的,带分页的查询.
mongo 原生语句:
db.dayCollect.aggregate([
{
$match: {date:{$gt:"2016-12-04",$lte: "2016-12-11"}}
},
{
$match: {advId:{$in:["2","36"]}}
}
, {$group : {_id : "$advId", playTimes : {$sum : "$playTimes"}}}
,{$sort:{_id:1}}
,{$skip:0},
{$limit:10}
]);
mongoTemplate java查询
AggregationOutput aggregationOutput=null;
//根据具体时间获取一周的时间段,具体到天
String[] timeInterval = getTimeInterval(date);
DBObject datematch = (DBObject) JSON.parse("{$match: {date:{$gt:\""+timeInterval[0]+"\",$lte: \""+timeInterval[1]+"\"}}}");
DBObject group = (DBObject) JSON.parse("{$group : {_id : \"$advId\", playTimes : {$sum : \"$playTimes\"}}}");
DBObject sort = (DBObject) JSON.parse("{$sort:{_id:-1}");
DBObject skip = (DBObject) JSON.parse("{$skip:"+pageView.getStartPage()+"}");
DBObject limit = (DBObject) JSON.parse("{$limit:"+pageView.getPageSize()+"}");
if(!StringUtils.isEmpty(advIds)){
String[] split = advIds.split(",");
DBObject advIdmatch = (DBObject) JSON.parse("{$match: {advId:{$in:["+split+"]}}}");
aggregationOutput = mongoTemplate.getCollection(DAY_COLLECT).aggregate(datematch, advIdmatch,group,sort,skip,limit);
}else{
aggregationOutput = mongoTemplate.getCollection(DAY_COLLECT).aggregate(datematch, group,sort,skip,limit);
}
Iterable<DBObject> output = aggregationOutput.results();
List<WeekConllect> weekList = new ArrayList<WeekConllect>();
for (DBObject obj : output) {
BasicDBObject obj2 = (BasicDBObject) obj;
WeekConllect conllect =new WeekConllect();
conllect.setAdvId(obj2.getString("_id"));
conllect.setPlayTimes(obj2.getString("playTimes"));
weekList.add(conllect);
}
4 按照一天的 24小时分组统计某些数据,因为我的时间是用字符串存储的,所以只能用截取这么玩了
db.advPlaysDetails.aggregate([ { $match: {advId:"1"} }, { $match: {playTime:{$gt: "2016-11-29",$lt:"2016-11-31" }} }, { $project :{new_time_stamp :{$substr :["$playTime",11,2]},"_id":0,playTimes:1,} }, { $group : {_id :"$new_time_stamp", playTimes : {$sum : "$playTimes"}} } ])
无痛破处
相关文章推荐
- mongodb常用操作语句
- Mongodb常用操作语句
- MongoDB与MySQL常用操作语句对照
- mongodb常用语句
- mongodb常用语句
- mongodb常用操作语句
- mongodb常用操作语句
- mongodb常用语句
- mongodb 常用语句
- MongoDB常用命令汇总之语句块操作。
- Mongodb常用语句
- Mongodb 常用语句
- 【转】MongoDB常用语句
- ubuntu mongodb 客户端配置和常用的查询语句
- mongodb常用语句(集合操作)
- mongodb常用语句
- MongoDB与MySQL常用操作语句对照
- mongodb常用语句(集合操作)
- MongoDB常见常用语句笔记
- mongodb常用语句