我在mongo中有一个项目集合,大致是:
{
_id: ObjectId("...."),
createdAt: ISODate(...),
links: [
{
receipt: {
visits: [ {..} ... ],
id: ...
},
... more links
],
... more project fields
}
总结一个链接数组,其中包含带有收据的子项,而收据又具有一个visits数组。我正在尝试计算每月的“访问次数”。我能够按月计数项目,但是我想知道是否有任何mongodb查询专家可以帮助我轻松地完成链接计数。
我想要的输出是项目创建时间(例如createdAt
)每个月所有访问的计数,例如:
{ "_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 }
通过对visits数组的长度求和来度量。
答案 0 :(得分:2)
请尝试以下查询
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:按年份和月份分组并添加总访问量