2013-04-02 32 views
5

我发现mongodb聚合框架是非常强大的 - 它似乎是一个很好的选择,以展平一个对象。我的模式在一个名为materials的数组中使用了一个子对象数组。材料的数量是可变的,但是特定的字段(类别)在数组中的对象间是唯一的。我想使用聚合框架来扁平化结构并根据类别字段的值动态重命名字段。我无法找到一个简单的方法来完成这个使用$项目以及$ cond。有没有办法?MongoDB聚合框架 - 动态字段重命名

的原因材料的对象的阵列,以允许简单的搜索:

例如{'materials.name':'XYZ'}将找到XYZ的任何文档都拉回来。

E.g.之前和文件

{ 
"_id" : ObjectId("123456"), 
"materials" : [ 
    { 
     "name" : "XYZ", 
     "type" : "Red", 
     ... 
     "category" : "A" 
    }, 
    { 
     "name" : "ZYX", 
     "type" : "Blue", 
     ... 
     "category" : "B" 
    }] 
} 

{ 
"material_A_name" : "XYZ", 
"material_A_type" : "Red", 
... 
"material_B_name" : "ZYX", 
"material_B_type" : "Blue", 
... 
} 
+0

您的'after'文档无效JSON – JohnnyHK

+0

谢谢,更新 - 这是从我的编辑器中创建模型的错误 – user2234151

+0

好吧,我明白你现在想要做什么。在agg框架中对动态生成的键没有太多的支持,所以我没有看到你怎么做到这一点。您可能只需在代码中处理结果即可完成此操作。 – JohnnyHK

回答

5

有在JIRA https://jira.mongodb.org/browse/SERVER-5947这样的一个请求 - 投上一票,如果你想拥有这个功能。

同时,如果您知道密钥的可能值是什么(即所有“类别”的唯一值),并且我在其上有一些示例代码on my blog,则可以采用解决方法。

+0

请注意,自从MongoDB 3.4.4版本以来,可以将键转换为值,反之亦然。 –