Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/477.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript mongo子字段的聚合查询_Javascript_Mongodb - Fatal编程技术网

Javascript mongo子字段的聚合查询

Javascript mongo子字段的聚合查询,javascript,mongodb,Javascript,Mongodb,我在mongo有一个项目集合,大致如下: { _id: ObjectId("...."), createdAt: ISODate(...), links: [ { receipt: { visits: [ {..} ... ], id: ... }, ... more links ], ... more project fields } 要汇总链接数组,请使用带有收据的子项,而收据又具有访问数组。我试图统计每个月的“访问次数”。我可

我在mongo有一个项目集合,大致如下:

{ 

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

  }, 
  ... more links
], 
... more project fields
}
要汇总链接数组,请使用带有收据的子项,而收据又具有访问数组。我试图统计每个月的“访问次数”。我可以按月计算项目,但我想知道是否有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 }

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

请尝试以下查询

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"} }}
    }}      
])
阶段1:查找具有
createdAt
字段的文档

阶段2:将链接数组拆分为单个记录


阶段3:按年份和月份分组并添加总访问量

请尝试以下查询

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"} }}
    }}      
])
阶段1:查找具有
createdAt
字段的文档

阶段2:将链接数组拆分为单个记录


阶段3:按年度和月份分组并添加总访问量

是否要获取访问量数组的大小?@Mani-如上所述是否要获取访问量数组的大小?@Mani-如上所述是否获得预期结果?是否获得预期结果?