当前位置: 首页 > 知识库问答 >
问题:

Mongoose中的聚合结果

孟新知
2023-03-14

我有一个数据库,里面有澳大利亚800家不同的酒吧、俱乐部和餐馆。

我想为我的网站建立一个链接列表,统计不同郊区和主要类别的不同场馆的数量。

像这样:

餐厅,伯恩山(15家)
餐厅,道斯角(6家)
俱乐部,悉尼(138家)

我可以通过首先获得所有场馆来艰难地完成这项任务。然后运行一个场地。distinct('details.location.Suburban')获得所有独特的郊区。

从这里,我可以运行后续查询,以获得该特定郊区和类别的场馆数量。

不过会有很多电话。一定有更好的方法?

Mongo聚合框架能在这里提供帮助吗?似乎不可能在单个查询中做到这一点。

以下是场馆模型:

{ 
        "name" : "Johnny's Bar & Grill",  

        "meta" : {
            "category" : {
                "all" : [
                    "restaurant",
                    "bar"
                ], 
                "primary" : "restaurant"
            }
        }, 

        "details" : {
            "location" : {
                "streetNumber" : "180", 
                "streetName" : "abbotsford road", 
                "suburb" : "bowen hills", 
                "city" : "brisbane", 
                "postcode" : "4006", 
                "state" : "qld", 
                "country" : "australia"
            }, 
            "contact" : {
                "phone" : [
                    "(07) 5555 5555"
                ]
            }
        }
    }
}

下面是我最终使用的蝙蝠尖叫的美化解决方案:

Venue.aggregate([
    {
        $group: {

            _id: {
                primary: '$meta.category.primary',
                suburb: '$details.location.suburb',
                country: '$details.location.country',
                state: '$details.location.state',
                city: '$details.location.city'
            },

            count: {
                $sum: 1
            },

            type: {
                $first: '$meta.category.primary'
            }
        }
    },

    {
        $sort: {
            count: -1
        }
    },

    {
        $limit: 50
    },

        // Reshapes each document in the stream, such as by adding new fields or removing existing fields. For each input document, outputs one document.
    {
        $project: {
            _id: 0,
            type : '$type',
            location : '$_id.suburb',
            count: 1
        }
    }
],

function(err, res){
    next(err, res);
});
}

共有1个答案

黎奇思
2023-03-14

使用以下聚合操作,您可以获得非常有用且易于转换的输出。

  • 根据国家、类别、州、城市和郊区对记录进行分组

代码

db.collection.aggregate([
{$group:{"_id":{"primary":"$meta.category.primary",
                "suburb":"$details.location.suburb",
                "country":"$details.location.country",
                "state":"$details.location.state",
                "city":"$details.location.city"},
         "count":{$sum:1},
         "type":{$first:"$meta.category.primary"}}},
{$sort:{"count":-1}},
{$project:{"_id":0,
           "type":"$type",
            "location":"$_id.suburb",
            "count":1}}
])

样品o/p:

{ "count" : 1, "type" : "restaurant", "location" : "bowen hills" }
 类似资料:
  • 我有以下JPA实体(getter、setter和非相关字段省略): 我的目标是使用JPQL或criteriaAPI实现查询,它将返回每天的平均事务量和最大事务量。 产生预期结果的原生SQL查询(MySQL数据库)如下所示: 遗憾的是,不鼓励使用本机 SQL 查询,并且 JPQL 不允许在 where 子句中使用子查询。 提前谢谢你。 附加: 我从以下Spring数据查询开始: 但显然没有用: 我可

  • 我正在查找与url匹配但返回自定义对象的记录。 我有这个模型。。 我想查询该模型并匹配url,但返回如下响应: 我需要能够通过将记录的ip与过程中的变量进行比较,动态计算反应的ip是否为真。 一次尝试是 但我似乎无法集中IP并查看我的变量IP是否在该数组中。 谢谢你的帮助。我第一次问!

  • 我有索引,其中每个文档都有这样的结构: 我需要计算每个演员对应的电影数量(演员可以在actor_1_name、actor_2_name或actor_3_name字段中) 这3个字段的映射是: 有没有一种方法,我可以聚合的结果,可以结合所有3个演员领域的条款,并给出一个单一的聚合。 目前,我正在为每个actor字段创建单独的聚合,并通过我的JAVA代码将这些不同的聚合合并成一个。 通过创建不同的聚合

  • 我有两个模型;一个用于用户,另一个用于学习组。每个StudyGroup都有一个唯一的字段。用户模型有一个studyGroups字段,它是字符串的数组。一个用户可以加入多个学习组。 用户模型

  • 我有这个用户和帖子集合,其中包含嵌入式文档

  • 我试图在使用RESTendpoint的骆驼路由中构建一个分割/聚合模式。它需要一个包含请求详细信息列表的请求对象。我想并行处理请求详细信息,然后将聚合结果返回给调用方。我希望这是一个同步调用。 这是我的路线中的代码。 我希望调用的结果是聚合调用(我的响应对象)的输出。但我实际上得到的是REST调用返回的请求对象?? 当我放入更多的日志语句时,我可以看到Split调用正在触发多个线程,这很好。我可以