首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mongo子字段上的聚合查询

问Mongo子字段上的聚合查询
EN

Stack Overflow用户
提问于 2019-02-28 12:00:51
回答 1查看 628关注 0票数 0

我在mongo中有一个项目集合,大致是:

代码语言:javascript
复制
{ 

_id: ObjectId("...."),
createdAt: ISODate(...),
links: [ 
  { 
    receipt: {
       visits: [ {..} ... ],
       id: ...

  }, 
  ... more links
], 
... more project fields
}

总结一个links数组,它的子项带有回执,而回执又有一个访问数组。我正在尝试统计每月的“访问量”。我可以按月统计项目,但我想知道是否有mongodb查询专家可以帮助我优雅地计算链接数量。

我想要的输出是所有访问的项目创建时间(即每月)的计数。createdAt),例如:

代码语言:javascript
复制
{ "_id" : "2019-02", "numberofviews" : 73 }
{ "_id" : "2019-01", "numberofviews" : 75 }
{ "_id" : "2018-12", "numberofviews" : 43 }
{ "_id" : "2018-11", "numberofviews" : 83 }
{ "_id" : "2018-10", "numberofviews" : 153 }
{ "_id" : "2018-09", "numberofviews" : 104 }

通过对访问数组的长度求和来测量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-28 14:18:02

请尝试以下查询

代码语言:javascript
复制
db.projects.aggregate([
    {$match: {"createdAt": {$exists: true}}},
    {$unwind: "$links"},
    {$group : { 
        _id : {$concat: [ {$substr:[{$year : "$createdAt"}, 0, -1]}, "-", {$substr:[{$month : "$createdAt"}, 0, -1]}]},  
        numberofviews : {$sum: { $cond: { if: { $isArray: "$links.receipt.visits" }, then: { $size: "$links.receipt.visits" }, else: "NA"} }}
    }}      
])

stage1:查找包含createdAt字段的文档

stage2:将链接数组拆分为单独的记录

stage3:按年、月分组,添加总访问量

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54918204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档