【发布时间】:2021-12-12 16:51:27
【问题描述】:
我的mongodb集合中的一个文档如下:
{
"transaction_id": "e10cc8d64204394cd35329a88dc4ab8f",
"timestamp": "2021-05-11 17:47:50",
"client_id": "chae@aklas.kr",
"ip": "172.69.34.31",
"level": "OK",
"request": {
"method": "POST",
"status_code": 200,
"status_name": "Ok",
"url": "/ocr/driver"
},
"bytes": 297,
"message": "Status authenticated successfully"
},
{
"transaction_id": "e10cc8d64204394cd35329a88dc4ab8f",
"timestamp": "2021-05-11 17:47:50",
"client_id": "chae@kkk.kr",
"ip": "172.69.34.31",
"level": "OK",
"request": {
"method": "POST",
"status_code": 200,
"status_name": "Ok",
"url": "/status/driver"
},
"bytes": 297,
"message": "Status authenticated successfully"
}......
我可以使用以下查询按时间戳(每天)获取每个 request.url 的总数。
db.getCollection('collection').aggregate([
{
$match: {
client_id: { $regex : '^chae@'},
'request.url': { $regex : '^\/ocr'}}
},
{ '$group' :
{
'_id': { $substr: [ "$timestamp", 0, 10 ] },
count: { $sum: 1 }
}
},
{
'$sort':
{ 'count': -1}
}
])
然后我得到 request.url 的结果,其中包含 /^ocr/
_id | count
2021-10-01 | 10
2021-09-30 | 15
2021-09-29 | 11
....
好像没问题。但是,如果我想获得不同的 request.url,我必须发送另一个查询。 我可以通过一个查询一次获得所有不同 request.url 的结果吗?
我想要的结果是这样的。
_id | count(ocr) | count(status) | count(something else)
2021-10-01 | 10 | 20 | 56
2021-09-30 | 15 | 26 | 28
2021-09-29 | 11 | 87 | 466
我什至不知道在mongodb中是否可以? 请建议我。 谢谢。
【问题讨论】: