mongodb:对数组内容进行计数排序
mongodb: count and sort content of array
我有一个具有以下结构的集合 loginAttemptList:
{
"username": "root",
"passwords": [
"1234",
"root",
"123456"
],
},
{
"username": "admin",
"passwords": [
"1234",
"123456",
"admin",
"administrator"
],
},
{
"username": "root",
"passwords": [
"1234",
"root"
],
}
我能够计算最常用的用户名并对其进行排序:
db.loginAttemptList.aggregate([
{$group : {_id:"$username", count:{$sum:1}}},
{$sort: {count:-1}}
])
现在我想对密码做同样的事情。每个对象(给定)的数组中有 0-10 个密码。是否也可以对它们进行计数和排序?
类似于:
"1234" : 3276 (times)
"123456": 2345
"password": 1349
等等
还有没有办法列出最常用的 username/password 组合?
只需 $unwind
密码数组并按复合组键分组。
db.collection.aggregate([
{
"$unwind": "$passwords"
},
{
$group: {
_id: {
username: "$username",
password: "$passwords"
},
count: {
$sum: 1
}
}
},
{
$sort: {
count: -1
}
}
])
这里是Mongo playground供您参考。
我有一个具有以下结构的集合 loginAttemptList:
{
"username": "root",
"passwords": [
"1234",
"root",
"123456"
],
},
{
"username": "admin",
"passwords": [
"1234",
"123456",
"admin",
"administrator"
],
},
{
"username": "root",
"passwords": [
"1234",
"root"
],
}
我能够计算最常用的用户名并对其进行排序:
db.loginAttemptList.aggregate([
{$group : {_id:"$username", count:{$sum:1}}},
{$sort: {count:-1}}
])
现在我想对密码做同样的事情。每个对象(给定)的数组中有 0-10 个密码。是否也可以对它们进行计数和排序?
类似于:
"1234" : 3276 (times)
"123456": 2345
"password": 1349
等等
还有没有办法列出最常用的 username/password 组合?
只需 $unwind
密码数组并按复合组键分组。
db.collection.aggregate([
{
"$unwind": "$passwords"
},
{
$group: {
_id: {
username: "$username",
password: "$passwords"
},
count: {
$sum: 1
}
}
},
{
$sort: {
count: -1
}
}
])
这里是Mongo playground供您参考。