Javascript 如何在MongoDB/Mongoose文档数组中找到重复次数最多的值?

Javascript 如何在MongoDB/Mongoose文档数组中找到重复次数最多的值?,javascript,node.js,mongodb,mongoose,Javascript,Node.js,Mongodb,Mongoose,假设我有一个集合,其中的文档如下所示: [ { "username": "user123", "email": "user@123.com", "favourites": [ { "location_name": "USA", "id": "10",

假设我有一个集合,其中的文档如下所示:

[
 {
    "username": "user123",
    "email": "user@123.com",
    "favourites": [
      {
        "location_name": "USA",
        "id": "10",
        "day": "19",
        "month": "7"
      },
      {
        "location_name": "England",
        "id": "12",
        "day": "19",
        "month": "6"
      }
    ]
  },
    
  {
    "username": "user2",
    "email": "user@53.com",
    "favourites": [
      {
        "location_name": "USA",
        "id": "10",
        "day": "19",
        "month": "7"
      },
      {
        "location_name": "Australia",
        "id": "8",
        "day": "8",
        "month": "10"
      },
      {
        "id": "5",
        "day": "4",
        "month": "1"
      }
    ]
  }
]
基本上我想找到“本月最喜欢的地点”。当月的收藏夹位置基本上是在当月添加到收藏夹中的位置,可以在用户的“收藏夹”数组中找到

在上面的例子中,在查询之后,我应该得到一个id为10,位置名称为“USA”。原因:我们正处于第7个月(7月),而location_name USA在“热门”阵列中被发现的次数最多。 那我怎么能质疑这个呢?如果不能直接用Mongo查询完成,我可以用JavaScript/Mongoose解决方案来管理


谢谢大家!

这应该能解决你的问题。您必须首先执行
$unwind
以将数组项分隔为不同的文档,使用
$match
仅筛选所需的月份,计算每个国家/地区的条目数并使用
$sortByCount
对其排序,最后使用
$limit
仅显示包含更多条目的条目

请注意:不要使用
$group
$sort
,而应该使用
$sortByCount

db.collection.aggregate([
{“$unwind”:“$FAVORITES”},
{“$match”:{“Favorites.month”:“7”},
{“$sortByCount”:“$favorites.location_name”},
{“$limit”:1}
]).pretty()