如何将mongodb中的$ project步骤从虚线转换为嵌套形式

时间:2014-12-08 10:13:07

标签: mongodb pymongo aggregation-framework

在我的数据库中,我拥有location属性的文档具有如下数据:

{location: {Country: 'Nigeria', State: 'Lagos', City: 'Victoria Island'}}

请注意'国家','州'和' City'是用户定义的键/属性/属性。用户可以使用图形界面来创建位置类型(键/属性/属性),因此它们可能包含空格,或者对于虚线表示法无效。

我目前在我的汇总中使用了$project步骤:

{$project: {location: '$location.{}'.format(location_type)}}

但我想将其转换为嵌套形式。到目前为止,做像

这样的事情
{location: {'$location': {'{}'.format(location_type): 1}}}
由于$location不是一个公认的聚合运算符,因此我还没有工作,而且我对MongoDB和聚合来说还是比较新的。

关于预期的输出,我只投影选定的location_type,以便我可以按此分组,因此我基本上希望'$group按指定的location_type,所以例如,我可以投射国家或城市或国家(再次,纯粹为了清酒 - 地点类型是用户定义的,因此它们可以被称为其他任何东西)以便按此分组。

例如,如果location_type是'国家',则输出为{location: 'Nigeria'},如果location_type为'状态' ,输出为{location: 'Lagos'},如果location_type为' City',则上述示例文档的输出为{location: 'Victoria Island'}

1 个答案:

答案 0 :(得分:1)

空格不应该是点符号的问题。例如,以下工作:

db.test.insert({ "a" : { "b c" : 1 } })
db.test.find({ "a.b c" : 1 })

对于$project,如果您有该字段的名称("完全合格"带点符号的名称,例如" ab c"或" location.Country")存储在location_type中,正确的格式为

{ "$project" : { "location" : "$" + location_type } }

或使用字符串插值的等效词。

我不确定转换为"嵌套表单"的含义。