2016-09-20 60 views
0

我的MongoDB文档的集合,它是这样的:多个不同/ GROUPBY在一个MongoDB中请求获得一个关联数组

[ 
    { 
     "Continent":"Europe", 
     "Country":"France", 
     "City":"Paris" 
    }, 
    { 
     "Continent":"Europe", 
     "Country":"France", 
     "City":"Marseille" 
    }, 
    { 
     "Continent":"Europe", 
     "Country":"Germany", 
     "City":"Berlin" 
    }, 
    { 
     "Continent":"Asia", 
     "Country":"China", 
     "City":"Beijing" 
    } 
] 

而且我想(在PHP脚本,但蒙山一个蒙戈查询)以获得在末端的关联数组是这样的:

$cities = array(
      "Europe" => array(
       "France" => array(
        "Paris", 
        "Marseille", 
       ), 
       "Germany" => array(
        "Berlin", 
       ), 
      ), 
      "Asia" => array(
       "China" => array(
        "Beijing", 
       ), 
      ), 
     ); 

我只需要得到一个关联数组,以便能够显示不同大陆的列表;国家和城市,但不是在3个请求,因为我想让用户过滤结果,所以如果在第一次输入时用户输入“欧洲”,我必须在国家输入中只显示“法国”和“德国”..

我不问任何人有关正确的查询,但我想寻找一些帮助来找到正确的Mongodb函数来使用,因为我对Mongo和NoSQL非常陌生。

也许我可以使用“聚合”运算符和一些“组”,或连锁倍数“独特”运算符...我真的不知道从哪里开始。

回答

0

尝试另一个方法:

function handleCities($json) 
{ 
    $result = []; 
    foreach(json_decode($json, true) as $city) { 
     $result[$city['Continent']][$city['Country']][] = $city['City']; 
    } 
    return $result; 
} 

$cities = '[ 
    { 
     "Continent":"Europe", 
     "Country":"France", 
     "City":"Paris" 
    }, 
    { 
     "Continent":"Europe", 
     "Country":"France", 
     "City":"Marseille" 
    }, 
    { 
     "Continent":"Europe", 
     "Country":"Germany", 
     "City":"Berlin" 
    }, 
    { 
     "Continent":"Asia", 
     "Country":"China", 
     "City":"Beijing" 
    } 
]'; 
var_dump(handleCities($cities)); 
+0

是的,但是这是PHP,我会需要遍历大量的数据。我需要从Mongo中获取我的所有文档,然后遍历它们。我认为蒙戈可以更有效地展示我想要的东西 – iBadGamer

相关问题