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()