Java使用mogodb统计次数,Mongodb同时聚合(计数)多个字段

聚合框架不会根据数据创建密钥,也不应该这样做,因为"data"不是密钥而是实际数据,因此您应该坚持使用该模式 .

这意味着你基本上可以这样做:

db.data.aggregate([

{ "$group": {

"_id": {

"event_type": "$event",

"day": { "$dayOfWeek": "$date" }

},

"count": { "$sum": 1 }

}}

])

这将计算每个事件每周的每周发生次数,尽管在输出中有多个文档,但每个事件很容易更改为单个文档:

db.data.aggregate([

{ "$group": {

"_id": {

"event_type": "$event",

"day": { "$dayOfWeek": "$date" }

},

"count": { "$sum": 1 }

}},

{ "$group": {

"_id": "$_id.event_type",

"days": { "$push": { "day": "$day", "count": "$count" } }

}}

])

这是一个数组形式,但它仍然保留您想要的结果 .

如果你真的想做你的确切形式,那么你想做这样的事情:

db.data.aggregate([

{ "$group": {

"_id": "$event",

"1": {

"$sum": {

"$cond": [

{ "$eq": [{ "$dayOfWeek": "$date" }, 1 ] },

1,

0

]

}

},

"2": {

"$sum": {

"$cond": [

{ "$eq": [{ "$dayOfWeek": "$date" }, 2 ] },

1,

0

]

}

},

"3": {

"$sum": {

"$cond": [

{ "$eq": [{ "$dayOfWeek": "$date" }, 3 ] },

1,

0

]

}

},

"4": {

"$sum": {

"$cond": [

{ "$eq": [{ "$dayOfWeek": "$date" }, 4 ] },

1,

0

]

}

},

"5": {

"$sum": {

"$cond": [

{ "$eq": [{ "$dayOfWeek": "$date" }, 5 ] },

1,

0

]

}

},

"6": {

"$sum": {

"$cond": [

{ "$eq": [{ "$dayOfWeek": "$date" }, 6 ] },

1,

0

]

}

},

"7": {

"$sum": {

"$cond": [

{ "$eq": [{ "$dayOfWeek": "$date" }, 7 ] },

1,

0

]

}

}

}}

)

但这真的很长,所以恕我直言,我会坚持使用第一个或第二个解决方案,因为它们更短,更容易阅读 .

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值