草庐IT

php - 按国家、州和城市汇总

coder 2023-11-06 原文

假设我们有一个公司列表,每个公司都被分配了城市、州(省)和国家/地区。

我正在寻找一个解决方案,创建一个3 级聚合 作为already mentioned here .不幸的是,我无法将原始 MongoDB 查询转换为 PHP。

当前异常:

exception: invalid operator '$push'

数据库项目:

{
    "_id" : ObjectId("52c85fafc8526a4d0d21e0be"),
    "city" : "Freiburg",
    "country" : "DE",
    "state" : "DE-BW",
    "_coords" : {
        "latitude" : 47.9990077,
        "longitude" : 7.842104299999999
    }
}

来源:

$collection = $this->getClient()->getCollection('companies');

$ops = array(
    array(
    '$group' => array(
        '_id' => array(
        'country' => '$country',
        'state' => '$state', 
        'city' => '$city' 
        ),
    ),
    ),
    array(
    '$group' => array(
        '_id' => array(
        'country' => '$_id.country',
        'state' => '$_id.state'
        ),
    ),
    ),
    array(
    '$group' => array(
        '_id' => array(
        'country' => '$_id.country',
        'state' => array('$push' => '$_id.state')
        ),
    ),
    ),
    array(
    '$sort' => array(
        'state' => 1
    ),
    )
);

$results = $collection->aggregate($ops);

预期结果:

[
    {
    "country" : "DE",
        "states" :  
        [     
            {
                "state" : "DE-BW",
                "cities" : [
                    {
                        "city": "Freiburg",
                        "_coords": {
                            "latitude" : 47.9990077,
                            "longitude" : 7.842104299999999
                        }
                    },

                    ...

                ]
            },

            ...

          ]
    },

    ...

]

最佳答案

你想要两个 $group这里的水平。可选择使用 $addToSet而不是 $push唯一性:

其他人的基本 JSON 表示法:

db.country.aggregate([
    { "$group": { 
        "_id": {
            "country": "$country",
            "state": "$state"
        },
        "cities": { 
            "$addToSet": {
                "city": "$city",
                "_coords": "$_coords"
            }
        }
    }},
    { "$group": {
        "_id": "$_id.country",
        "states": {
            "$addToSet": {
                "state": "$_id.state",
                "cities": "$cities"
            }
        }
    }}       
])

并为您提供 PHP 表示法:

$collection->aggregate(
    array(
        array(
            '$group' => array(
                 '_id' => array(
                     'country' => 'country',
                     'state' => '$state'
                 ),
                 '$cities' => array(
                     '$addToSet' => array(
                         'city' => '$city',
                         '_coords' => '$_coords'
                      )
                 )
            )
        ),
        array(
            '$group' => array(
                '_id' => '$_id.country',
                'states' => array(
                    '$addToSet' => array(
                         'state' => '$_id.state',
                         'cities' => '$cities'                                  
                     )              
                )              
            )
        )
    )
);

但说真的,学习如何使用 json_decode。 JSON 几乎是通用数据结构表示的“通用语言”,而不是贬低 YAML 或简化的 XML 或其他。将这些东西翻译成本地语言表示确实不难,尤其是当存在许多库可以这样做时。

关于php - 按国家、州和城市汇总,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24801562/

有关php - 按国家、州和城市汇总的更多相关文章

  1. ruby - 从 Ruby 中的国家代码获取表情符号标志 - 2

    我想将“US”之类的国家代码转换为表情符号标志,即将“US”字符串转换为Ruby中适当的Unicode。Here'sanequivalentexampleforJava 最佳答案 使用tr将字母字符转换为其区域指示符号:'US'.tr('A-Z',"\u{1F1E6}-\u{1F1FF}")#=>"??"当然你也可以直接使用Unicode字符:'US'.tr('A-Z','?-?')#=>"??" 关于ruby-从Ruby中的国家代码获取表情符号标志,我们在StackOverflow上找

  2. 常见网络安全产品汇总(私信发送思维导图) - 2

    安全产品安全网关类防火墙Firewall防火墙防火墙主要用于边界安全防护的权限控制和安全域的划分。防火墙•信息安全的防护系统,依照特定的规则,允许或是限制传输的数据通过。防火墙是一个由软件和硬件设备组合而成,在内外网之间、专网与公网之间的界面上构成的保护屏障。下一代防火墙•下一代防火墙,NextGenerationFirewall,简称NGFirewall,是一款可以全面应对应用层威胁的高性能防火墙,提供网络层应用层一体化安全防护。生产厂家•联想网御、CheckPoint、深信服、网康、天融信、华为、H3C等防火墙部署部署于内、外网编辑额,用于权限访问控制和安全域划分。UTM统一威胁管理(Un

  3. ruby-on-rails - 这个 C 和 PHP 程序员如何学习 Ruby 和 Rails? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我来自C、php和bash背景,很容易学习,因为它们都有相同的C结构,我可以将其与我已经知道的联系起来。然后2年前我学了Python并且学得很好,Python对我来说比Ruby更容易学。然后从去年开始,我一直在尝试学习Ruby,然后是Rails,我承认,直到现在我还是学不会,讽刺的是那些打着简单易学的烙印,但是对于我这样一个老练的程序员来说,我只是无法将它

  4. ruby-on-rails - Ruby on Rails 国家/州选择 Enigma - 2

    我正在尝试实现一些看似非常简单的东西,而此时我已经为此苦苦思索了好几天。我想要的最终结果是一个国家选择下拉菜单,与一个国家选择下拉菜单相关联,这样当一个给定的国家被选中时,如果州是已知的,那么这些州就会显示在一个选择下拉列表中,如果该国家/地区没有已知的州,则会显示一个文本字段。我觉得我快到了。此时,界面实际上会根据人员所在的国家/地区生成州列表,只是它拒绝动态更新下拉列表。我的View中收集国家和州位置的部分如下所示:#_person_setup.html.erb*'width:200px',:id=>'country_select',:onchange=>remote_functi

  5. 酷早报:10月21日全球Web3加密行业重大资讯大汇总 - 2

    2022年10月21日星期五【数据指标】加密货币总市值:$0.95万亿BTC市值占比:38.51%恐慌贪婪指数:23极度恐慌 【今日快讯】1、【政讯】1.1.1、美联储布拉德:市场预期美联储11月会加息75个基点1.1.2、美联储哈克:将维持加息一段时间1.2、美国10年期国债收益率触及4.197%,为2008年6月以来最高1.3、法国数字转型部长:政府将专注于DeFi和Web31.4、巴西ATM机将于11月3日起支持USDT1.5、美众议院副议长将于11月初加入a16zCrypto担任政府事务主管1.6、香港数字资产托管机构FirstDigitalTrust首席执行官:香港仍是安全

  6. ruby-on-rails - Rails 还是 Sinatra? PHP程序员入门学习哪个好? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我使用PHP的时间太长了,对它感到厌倦了。我也想学习一门新语言。我一直在使用Ruby并且喜欢它。我必须在Rails和Sinatra之间做出选择,那么您会推荐哪一个?Sinatra真的不能用来构建复杂的应用程序,它只能用于简单的应用程序吗?

  7. ruby-on-rails - 使用 Faker gem 生成相关的城市、邮政编码、国家代码值 - 2

    有没有办法得到Fakergem生成“相关的”城市和国家/地区代码值?例如,加利福尼亚州温哥华明尼苏达州明尼阿波利斯我这样做:FactoryGirl.definedofactory:locationdo...city{Faker::Address.city}country_code{['US','CA'].sample}...endend但不能保证city实际位于country_code。我会满足于这样的事情:postal_code{Faker::Address.postcode(['US','CA'].sample)}然后我可以对其进行地理编码以获得其他值。

  8. ruby-on-rails - PHP 魔术方法 __call、__get 和 __set 的 Ruby 等价物 - 2

    我很确定Ruby有这些(等同于__call、__get和__set),否则find_by将如何在Rails中工作?也许有人可以举一个简单的例子来说明如何定义与find_by相同的方法?谢谢 最佳答案 简而言之你可以映射__调用带有参数的method_missing调用__设置为方法名称以'='结尾的method_missing调用__获取不带任何参数的method_missing调用__调用PHPclassMethodTest{publicfunction__call($name,$arguments){echo"Callingob

  9. ruby - Lisp - 是否适合网络编程/应用程序(交互式)? ruby 的方式是? php的方式是? - 2

    Lisp是否适合Web编程/应用程序(交互式),就像ruby​​和php一样?需要考虑的事情是:易于使用可部署性难度(尤其是对于编程初学者而言)(编辑)在阅读PaulGraham'sessay之后,我特别提到了CommonLisp.将是我的第一门编程语言。在这方面。这样做合适吗?我听说Clojure的宏功能不如CommonLisp的强大,这就是我尝试学习Clojure的原因。它教授编程并且非常强大。 最佳答案 Lisp是一个语系,而不是单一的语言。为了稍微回答您的问题,是的,存在用于各种Lisp方言的Web框架,例如用于Common

  10. 软件工程毕业设计课题(81)微信小程序毕业设计PHP校园跑腿小程序系统设计与实现 - 2

        项目背景和意义 目的:本课题主要目标是设计并能够实现一个基于微信校园跑腿小程序系统,前台用户使用小程序发布跑腿任何和接跑腿任务,后台管理使用基于PHP+MySql的B/S架构;通过后台管理跑腿的用户、查看跑腿信息和对应订单。意义:手机网络时代,大学生通过手机网购日常用品、外卖外卖、代取快递等已不再是稀奇的事情。此外,不少高校还流行着校园有偿工作,校园跑腿就成了大学生创业服务项目。        因为你在校园里,所以不会有进入的限制。并不是所有的外卖平台都可以随意进入校园,比如小黄和小蓝的双打外卖平台。许多大学禁止送餐进入学校,更不用说送餐进入宿舍了。这一措施使得校园服务市场的竞争相对不

随机推荐