在我的数据库中,我拥有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'}
。
答案 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 } }
或使用字符串插值的等效词。
我不确定转换为"嵌套表单"的含义。