繁体   English   中英

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

[英]How to find the most repeated value in arrays of MongoDB/Mongoose documents?

假设我有一个包含如下文档的集合:

[
 {
    "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"
      }
    ]
  }
]

基本上我想找到“本月最喜欢的位置”。 当月最喜欢的地点基本上就是当月加入收藏夹的地点,最能在用户的“收藏夹”arrays里面找到

在上面的示例中,在查询之后我应该得到 10 的 id 和“USA”的 location_name。 原因:我们在第 7 个月(7 月),location_name USA 在“收藏夹”arrays 中出现次数最多。那么我该如何查询呢? 如果不能直接使用 Mongo 查询来完成,我可以使用 JavaScript/Mongoose 解决方案进行管理。

谢谢!

这应该可以解决您的问题。 您必须首先执行$unwind以将数组项分成不同的文档,使用$match仅过滤所需的月份,计算每个国家/地区的条目数并使用$sortByCount对其进行排序,最后使用$limit仅带来一个有更多条目。

请注意:您应该使用$sortByCount而不是使用$group$sort

db.collection.aggregate([
    {"$unwind" : "$favourites"},
    {"$match" : {"favourites.month" : "7"}},
    {"$sortByCount" : "$favourites.location_name"},
    {"$limit" : 1}
]).pretty()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM