数据库表表1:数据记录表varmongoose=require('mongoose'),Schema=mongoose.Schema;varDocViewSchema=newSchema({realName:String,//真实姓名userName:String,//OA账户数:Number,//文档统计docName:String,//文档项名称docType:String,//文档项类型orgPath:String,//部门组织路径orgGroup:String,//事业群orgName:String//集团时间:String,});module.exports=mongoose.model('Doc_view',DocViewSchema);表2:主文档表varmongoose=require('mongoose'),Schema=mongoose.Schema;vardocsSchema=newSchema({docType:String,//文档类型user_name:String,//系统用户realName:String,//用户中文名description:String,//文档描述gitUrl:String,//文档源远程地址ofoperationdisplayName:String,//文档显示名称name:String,//文档名称logo:String,owner:String,//文档创建者developer:Array,//开发者realName:String,//真实姓名toTop:Date,//是否置顶dest:String,//vuepress类型文档的输出目录docKey:String,//约束文档为公共(public)、私有(private)类型关键字privateMember:Array,//存储人谁可以查看私人文档CreateTime:{type:Date,default:Date.now},openFiles:Array,orgName:String,//部门orgPath:String,//部门组织路径orgGroup:String,//业务组docCollection:Array,newGit:Boolean//标识是否是系统新建的项目});module.exports=mongoose.model('docs',docsSchema);TableData表1:显示数据{"_id":ObjectId("603678000f6ec514b4b8d02f"),"__v":0,"time":"2021-02-24","docName":"abgFeedback","userName":"zhangsan","orgPath":"******","orgGroup":"******","orgName":"****","realName":"张三","count":10}/*42*/{"_id":ObjectId("603678000f6ec514b4b8d030"),"__v":0,"time":"2021-02-24","docName":"bookgit","userName":"liuniu","orgPath":"******","orgGroup":"******","orgName":"****","realName":"六牛","count":1}/*43*/{"_id":ObjectId("603678000f6ec514b4b8d031"),"__v":0,"time":"2021-02-24","docName":"testtestdocs","userName":"lisi","orgPath":"******","orgGroup":"*****","orgName":"****","realName":"李四”,“计数”:1}/*44*/{“_id”:ObjectId(“6037c9800f6ec514b4b8d03c”),“__v”:0,“时间”:“2021-02-25”,“docName”:“abgFeedback","userName":"zhangsan","orgPath":"******","orgGroup":"*****","orgName":"****","realName":"张三","count":10}表2:文档数据/*45*/{"_id":ObjectId("5f6da851a18a783210da7a16"),"docType":"vuepress","name":"abgFeedback","gitUrl":"*****/abgFeedback.git","description":"问题反馈收集","owner":"zhangsan","orgGroup":"*****","orgName":"*****","orgPath":"****","logo":"https://img.58cdn.com.cn/escstatic/fecar/pmuse/58doc/58logo.jpeg","newGit":false,"toTop":ISODate("2020-11-20T02:41:33.742Z"),"realName":"龚承辉","dest":"abgFeedback","opendFiles":[],"createTime":ISODate("2020-09-25T08:20:33.373Z"),"developer":[],"__v":0,"docCollection":[],"docKey":"private","privateMember":["lisi"]}联表查询db.getCollection('doc_views').aggregate([{$match:{time:{$gte:"2020-03-29",$lte:"2021-03-29"}}},{$group:{_id:{"name":'$docName'},total:{$sum:"$count"}}},{$lookup:{from:"docs",localField:"_id.name",foreignField:"name",as:"child"}},{$project:{"child._id":false,"child.gitUrl":false,"child.description":false,"child.orgGroup":false,"child.orgPath":false,“child.newGit”:假,“child.toTop”:假,“child.docCollection”:假,“child.opendFiles”:假,“child.createTime”:假,“child.logo”:假,“child.orgName”:假,“child.owner”:假,“child.realName”:假,“child.__v”:假,“孩子.privateMember":false,"child.developer":false,"child.name":false}},])$match聚合匹配条件这是为了匹配前端传入的开始时间和截止时间doc_views表的字段segment$group的所有数据按一些指定的表达式对文档进行分组,然后将每个不同的分组文档输出到下一阶段。输出文档包含一个_id字段,其中包含由关键字区分的组。这里使用文档名docName作为关键字进行分组统计。同时为docName定义了一个name的别名,包裹在_id对象下。合并同名文档并累加count字段输出总计$lookup关联查询参数赋值说明从"docs"需要关联查询的表主表docslocalField"_id.name"匹配将查询数据匹配查询数据的表的文档名字段作为参数传递“_id.name”的原因是:聚合管道模式数组的最后一个参数是下一个参数的入参。当前表文件名关键字已经定义在_id对象中。foreignField“name”匹配要链接的表的文档名keyword是docs表文档的名字。关键字as"child"将当前匹配的数据输出到as定义的别名child。child是一个数组注意:通过触摸一个关键字来聚合数据例如:文档名称是第一个聚合数据每个关键字只能有一条数据。否则连表时无法匹配关键字对应的主表数据。$project可以指定显示或忽略链接表中的某些字段。/忽略该字段的查询结果[/*22*/{"_id":{"name":"ces1234"},"total":5,"child":[{"docType":"gitbook","docKey":"private"}]},/*23*/{"_id":{“name”:“abgFeedback”},“total”:43,“child”:[{“docType”:“vuepress”,“dest”:“abgFeedback”,“docKey”:“private”}]}]//不忽略该字段的返回结果[/*22*/{"_id":{"name":"ces1234"},"total":5,"child":[{"_id":ObjectId("5da19272f76a861008c468ff"),"docType":"gitbook","name":"ces1234","gitUrl":"***/docs/ces1234.git","description":"APP前端群业务文档","owner":"zhangsan","opendFiles":[],"createTime":ISODate("2019-10-12T08:44:34.986Z"),"developer":["lisi"],"__v":0,“orgPath”:“****”,“orgName”:“****”,“orgGroup”:“****”,“toTop”:ISODate(“2020-06-12T02:09:20.255Z"),"logo":"https://img.58cdn.com.cn/escstatic/fecar/pmuse/58doc/58logo.jpeg","docCollection":[],"docKey":"private","privateMember":[],"realName":"龚成辉","displayName":"测试项目"}]},/*23*/{"_id":{"name":"abgFeedback"},"total":43、“孩子”:[{“_id”:ObjectId(“5f6da851a18a783210da7a16”),“docType”:“vuepress”,“名称”:“abgFeedback”,“gitUrl”:“****/docs/abgFeedback.git","description":"问题反馈收集","owner":"gongchenghui","orgGroup":"****","orgName":"****","orgPath":"****","标志":"https://img.58cdn.com.cn/escstatic/fecar/pmuse/58doc/58logo.jpeg","newGit":false,"toTop":ISODate("2020-11-20T02:41:33.742Z"),"realName":"龚成辉","dest":"abgFeedback","opendFiles":[],"createTime":ISODate("2020-09-25T08:20:33.373Z"),"developer":[],"__v":0,"docCollection":[],"docKey":"private","privateMember":["wangwu"],"displayName":"前端问题反馈"}]}]
