[英]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.