MongoDB聚合框架 - 动态字段重命名

use*_*151 6 mongodb mongodb-query

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

物质对象数组的原因是允许简单搜索:

例如{'materials.name':'XYZ'}拉回找到XYZ的任何文件.

例如文件之前和之后

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

{
"material_A_name" : "XYZ",
"material_A_type" : "Red",
...
"material_B_name" : "ZYX",
"material_B_type" : "Blue",
...
}
Run Code Online (Sandbox Code Playgroud)

Asy*_*sky 5

在jira https://jira.mongodb.org/browse/SERVER-5947中有关于此类内容的请求- 如果您想拥有此功能,请将其投票.

同时,如果您事先知道密钥的可能值(即"类别"的所有唯一值),并且我的博客上有一些示例代码,则有一种解决方法.