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供您参考。