using MongoDB.Bson;
using MongoDB.Driver;
using MongoDB.Driver.Builders;
using NationalUnion.AdGallery.Model;
using NationalUnion.Common.Utility;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks; namespace NationalUnion.AdGallery.DALMongo
{
public class AdUVDAL
{
/// <summary>
/// 查找日期范围内的UV量
/// </summary>
/// <param name="argSatartDate"></param>
/// <param name="argEndDate"></param>
/// <returns></returns>
public List<AdIDWIDSID> GetUVGroupBySID(DateTime argSatartDate, DateTime argEndDate)
{
var vMongoClient = new MongoClient(ConstUtinity.MongoDBCon);
var vServer = vMongoClient.GetServer();
var vDataBase = vServer.GetDatabase(ConstUtinity.DATABASE);
var vCollection = vDataBase.GetCollection<AdUV>(ConstUtinity.ADUVCOL); var vQueryDateStart = Query<AdUV>.GTE(x => x.CrateDate, argSatartDate);
var vQueryDateEnd = Query<AdUV>.LTE(x => x.CrateDate, argEndDate); IMongoQuery vQuery = Query.And(vQueryDateStart, vQueryDateEnd);
Dictionary<string, int> InitailDIC = new Dictionary<string, int>();
InitailDIC["num"] = 0;
var vQuryble = vCollection.Group(vQuery, "SID",
BsonDocument.Create(InitailDIC),
new BsonJavaScript("function(doc,prev){prev.num++;}"),
new BsonJavaScript("function(doc,out){doc.Count=doc.num;delete doc.num }")); List<AdIDWIDSID> vAdIDWIDList = new List<Model.AdIDWIDSID>();
foreach (var item in vQuryble)
{
vAdIDWIDList.Add(new AdIDWIDSID()
{
SID = item["SID"].AsInt(),
Count = item["Count"].AsInt()
});
}
return vAdIDWIDList;
} /// <summary>
/// 查找日期范围内的各站点UV量
/// </summary>
/// <param name="argSatartDate"></param>
/// <param name="argEndDate"></param>
/// <param name="SID"></param>
/// <returns></returns>
public List<AdIDWIDSID> GetSiteUV(DateTime argSatartDate, DateTime argEndDate,int SID)
{
var vMongoClient = new MongoClient(ConstUtinity.MongoDBCon);
var vServer = vMongoClient.GetServer();
var vDataBase = vServer.GetDatabase(ConstUtinity.DATABASE);
var vCollection = vDataBase.GetCollection<AdUV>(ConstUtinity.ADUVCOL); var vSIDQuery = Query<AdUV>.EQ(x => x.SID, SID);
var vQueryDateStart = Query<AdUV>.GTE(x => x.CrateDate, argSatartDate);
var vQueryDateEnd = Query<AdUV>.LTE(x => x.CrateDate, argEndDate); IMongoQuery vQuery = Query.And(vQueryDateStart, vQueryDateEnd, vSIDQuery);
Dictionary<string, int> InitailDIC = new Dictionary<string, int>();
InitailDIC["num"] = 0;
var vQuryble = vCollection.Group(vQuery, "WID",
BsonDocument.Create(InitailDIC),
new BsonJavaScript("function(doc,prev){prev.num++;}"),
new BsonJavaScript("function(doc,out){doc.Count=doc.num;delete doc.num }")); List<AdIDWIDSID> vAdIDWIDList = new List<Model.AdIDWIDSID>();
foreach (var item in vQuryble)
{
vAdIDWIDList.Add(new AdIDWIDSID()
{
WID = item["WID"].AsInt(),
Count = item["Count"].AsInt()
});
}
return vAdIDWIDList;
} /// <summary>
/// 根据日期范围和SID对数据FeedBack分组
/// </summary>
/// <param name="argSatartDate"></param>
/// <param name="argEndDate"></param>
/// <param name="SID"></param>
/// <returns></returns>
public List<AdIDWIDSID> GetUVGroupByFeedBack(DateTime argSatartDate, DateTime argEndDate, int SID)
{
var vMongoClient = new MongoClient(ConstUtinity.MongoDBCon);
var vServer = vMongoClient.GetServer();
var vDataBase = vServer.GetDatabase(ConstUtinity.DATABASE);
var vCollection = vDataBase.GetCollection<AdUV>(ConstUtinity.ADUVCOL); var vSIDQuery = Query<AdUV>.EQ(x => x.SID, SID);
var vQueryDateStart = Query<AdUV>.GTE(x => x.CrateDate, argSatartDate);
var vQueryDateEnd = Query<AdUV>.LTE(x => x.CrateDate, argEndDate); IMongoQuery vQuery = Query.And(vQueryDateStart, vQueryDateEnd, vSIDQuery);
string mapfunction = @"function Map() {
if(this.FeedBack.length>0)
{
var FeedBackID=this.FeedBack.split('|');
if(FeedBackID.length>0)
{
emit(FeedBackID[0],{count:1});
}
}
}";
string reducefunction = @"function Reduce(key, values) {
var count=0;
for(var i=0;i<values.length;i++){
count+=[values].count;
}
return {FeedBack:key,UV:count};
}"; BsonJavaScript vMaP = new BsonJavaScript(mapfunction);
BsonJavaScript vreduce = new BsonJavaScript(reducefunction);
MapReduceResult vResult = vCollection.MapReduce(vQuery, vMaP, vreduce); return null;
} /// <summary>
/// 查找日期范围内产生UV的各个页面类型名
/// </summary>
/// <param name="argSatartDate"></param>
/// <param name="argEndDate"></param>
/// <param name="argPageType"></param>
/// <param name="SID"></param>
/// <param name="argUrl"></param>
/// <returns></returns>
public List<AdIDWIDSID> GetGomePageUV(DateTime argSatartDate, DateTime argEndDate, int argPageType, int SID, string argUrl)
{
var vMongoClient = new MongoClient(ConstUtinity.MongoDBCon);
var vServer = vMongoClient.GetServer();
var vDataBase = vServer.GetDatabase(ConstUtinity.DATABASE);
var vCollection = vDataBase.GetCollection<AdUV>(ConstUtinity.ADUVCOL); var vQueryDateStart = Query<AdUV>.GTE(x => x.CrateDate, argSatartDate);
var vQueryDateEnd = Query<AdUV>.LTE(x => x.CrateDate, argEndDate); IMongoQuery vQuery = Query.And(vQueryDateStart, vQueryDateEnd);
if (SID > 0)
{
var vQuerySID = Query<AdUV>.EQ(x => x.SID, SID);
vQuery = Query.And(vQuery, vQuerySID);
}
if (!string.IsNullOrWhiteSpace(argUrl))
{
var vQueryRawUrl = Query<AdUV>.EQ(x => x.RootUrl, argUrl);
vQuery = Query.And(vQuery, vQueryRawUrl);
} if (argPageType > -1)
{
var vQueryPageType = Query<AdUV>.EQ(x => x.PageType, argPageType);
vQuery = Query.And(vQuery, vQueryPageType);
} Dictionary<string, int> InitailDIC = new Dictionary<string, int>();
InitailDIC["num"] = 0;
var vQuryble = vCollection.Group(vQuery, "PageType",
BsonDocument.Create(InitailDIC),
new BsonJavaScript("function(doc,prev){prev.num++;}"),
new BsonJavaScript("function(doc,out){doc.Count=doc.num;delete doc.num }")); List<AdIDWIDSID> vAdIDWIDList = new List<Model.AdIDWIDSID>();
foreach (var item in vQuryble)
{
vAdIDWIDList.Add(new AdIDWIDSID()
{
PageType = item["PageType"].AsInt(),
Count = item["Count"].AsInt()
});
}
return vAdIDWIDList;
} /// <summary>
/// 查找日期范围内单品的UV
/// </summary>
/// <param name="argSatartDate"></param>
/// <param name="argEndDate"></param>
/// <param name="argPageType"></param>
/// <param name="SID"></param>
/// <param name="argUrl"></param>
/// <returns></returns>
public List<ResultModel> GetProductUV(DateTime argSatartDate, DateTime argEndDate, int argPageType, int argSID, string argUrl)
{
var vMongoClient = new MongoClient(ConstUtinity.MongoDBCon);
var vServer = vMongoClient.GetServer();
var vDataBase = vServer.GetDatabase(ConstUtinity.DATABASE);
var vCollection = vDataBase.GetCollection<AdUV>(ConstUtinity.ADUVCOL); #region march
BsonDocument vMarchBson = new BsonDocument {
{"CrateDate", new BsonDocument {
{ "$gte", argSatartDate },
{ "$lte", argEndDate } }
}
};
if (argPageType > -1)
{
vMarchBson.AddRange(new BsonDocument {
{"PageType",argPageType}
});
}
if (argSID > 0)
{
vMarchBson.AddRange(new BsonDocument {
{"SID",argSID}
});
} if (!string.IsNullOrWhiteSpace(argUrl))
{
vMarchBson.AddRange(new BsonDocument {
{"RootUrl",argUrl}
});
} BsonDocument vMatch = new BsonDocument();
vMatch.AddRange(new BsonDocument { { "$match", vMarchBson } });
#endregion
BsonDocument vBsonLimit = new BsonDocument{
{"$limit",50}
}; BsonDocument vBsonGroup = new BsonDocument{
{"$group",new BsonDocument{
{"_id",new BsonDocument{{"RootUrl","$RootUrl"}}},
{"Count",new BsonDocument{{"$sum",1}}}
}
}
}; BsonDocument vBsonSort = new BsonDocument {
{"$sort",new BsonDocument{{"Count",-1}}}
}; AggregateArgs vAggregateArgs = new AggregateArgs();
List<BsonDocument> vBsonDocumentList = new List<BsonDocument>();
vBsonDocumentList.Add(vMatch);
vBsonDocumentList.Add(vBsonLimit);
vBsonDocumentList.Add(vBsonGroup);
vBsonDocumentList.Add(vBsonSort); vAggregateArgs.Pipeline = vBsonDocumentList;
var vResult = vCollection.Aggregate(vAggregateArgs); List<ResultModel> vResultModelList = new List<ResultModel>();
foreach (var item in vResult)
{
vResultModelList.Add(new ResultModel()
{
RootUrl = item["_id"]["RootUrl"].AsString(),
Count = item["Count"].AsInt()
});
} return vResultModelList;
}
}
}

mongodb分组,的两种方式,先记一下的更多相关文章

  1. 不使用spring的情况下用java原生代码操作mongodb数据库的两种方式

    由于更改了mongodb3.0数据库的密码,导致这几天storm组对数据进行处理的时候,一直在报mongodb数据库连接不上的异常.   主要原因实际上是和mongodb本身无关的,因为他们改的是配置 ...

  2. List分组的两种方式

    java8之前List分组 假设有个student类,有id.name.score属性,list集合中存放所有学生信息,现在要根据学生姓名进行分组. public Map<String, Lis ...

  3. python利用mongodb上传图片数据 : GridFS 与 bson两种方式

    利用mongodb保存图片通常有两种方法,一种是将图片数据转化为二进制作为字典的键值对进行保存,另一种是利用mongodb提供的GridFS进行保存,两者各有利弊.性能方面的优劣未曾测试,无法进行评价 ...

  4. 《连载 | 物联网框架ServerSuperIO教程》- 10.持续传输大块数据流的两种方式(如:文件)

    1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...

  5. 通过属性 Cesium的FBO主要支持两种方式

    角色其实就是一类权限的分组,所以给用户分配角色其实也是在给用户分配权限.在oracle中有三个比较常用的角色.对于一般不是很严格的系统可以授予开发用户CONNECT.RESOURCE角色权限即可. 其 ...

  6. Log4Net日志记录两种方式

     简介 log4net库是Apache log4j框架在Microsoft .NET平台的实现,是一个帮助程序员将日志信息输出到各种目标(控制台.文件.数据库等)的工具.     log4net是Ap ...

  7. 基于Maven的SpringBoot项目实现热部署的两种方式

    转载:http://blog.csdn.net/tengxing007/article/details/72675168 前言 JRebel是JavaEE中比较流行的热部署插件,可快速实现热部署,节省 ...

  8. SpringBoot从入门到精通二(SpringBoot整合myBatis的两种方式)

    前言 通过上一章的学习,我们已经对SpringBoot有简单的入门,接下来我们深入学习一下SpringBoot,我们知道任何一个网站的数据大多数都是动态的,也就是说数据是从数据库提取出来的,而非静态数 ...

  9. SpringCloud系列-整合Hystrix的两种方式

    Hystrix [hɪst'rɪks],中文含义是豪猪,因其背上长满棘刺,从而拥有了自我保护的能力.本文所说的Hystrix是Netflix开源的一款容错框架,同样具有自我保护能力. 本文目录 一.H ...

  10. Spring Boot配置过滤器的两种方式

    过滤器(Filter)是Servlet中常用的技术,可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截,常用的场景有登录校验.权限控制.敏感词过滤等,下面介绍下Spring Boot配置过 ...

随机推荐

  1. [svn] linux命令——svn分支创建、合并

    一.创建分支 1,创建一个分支 svn copy svn://xx.com/repo/trunk svn://xx.com/repo/branches/TRY-something -m 'make b ...

  2. 二. log4j配置文件

    log4j的配置文件 # Output pattern : date [thread] priority category - message log4j.rootLogger=info,Consol ...

  3. (C# Debug)A first chance exception of type 'System.ArgumentException' occurred in System.Data.dll

    Debug 模式下运行程序的时候,Output 窗口出来个错误“A first chance exception of type 'System.ArgumentException' occurred ...

  4. Navicat(连接)-1

    连接 要在 Navicat 开始使用你的服务器,你要首先用连接窗口创建一个或多个连接.如果你是一个服务器新手和不肯定如何工作,你可能想看看: MySQL 用户手册 Oracle 数据库文件 Postg ...

  5. [复变函数]第05堂课 1.4 复球面与 $\infty$; 作业讲解; 2 解析函数 2.1 解析函数的概念与 Cauchy-Riemann 方程

    1. 复球面 大漠孤烟直, 长河落日圆. $$\bex \bbC\cong \bbS^2\bs \sed{N},\quad \bbC_\infty=\bbC\cup \sed{\infty}\mbox ...

  6. mysql中游标的使用

    BEGIN #遍历占领野地表还原军队 # and cityid=cityid) ,) ;#occupyWild表的TroopsId ,) ;#occupyWild表的CityId ,) ;#occup ...

  7. Google是如何做代码审查的?

    Google是一个非常优秀的公司.他们做出了很多令人称赞的东西—既是公司外部,人们可以看到的东西,也是公司内部.有一些在公司内部并不属于保密的事情,在外部并没有给予足够广泛的讨论.这就是我今天要说的. ...

  8. NSPredicate,谓词

    原文地址:http://blog.csdn.net/holydancer/article/details/7380799 在语言上,谓语,谓词是用来判断的,比如“我是程序猿”中的是,就是表判断的谓语, ...

  9. Gatling的进阶二

    1. 参数化     Gatling可以很方便使用csv文件进行参数化,例如一个用户信息表:   /* user_information.csv */ username,password,accoun ...

  10. shell如何传递外部参数给文件

    shell里面如何传递参数: sh test.sh zhang 20 那test.sh里面咋接受参数呢? #!/usr/bin/env sh name=$1 age=$2 echo "nam ...