MongoDB聚合:用其中的值替换子文档

时间:2016-06-03 16:56:41

标签: arrays mongodb flatten subdocument

我们说我有以下格式的文件集合:

{
    // some fields
    "name" : "some name",
    "specs" : [
        {
            "key" : {
                "en" : "English key name",
                "xx" : "Other key name",
            },
            "value" : {
                "en" : "English value",
                "xx" : "Other value",
            }
        },
        {
            "key2" : {
                "en" : "English key name2",
                "xx" : "Other key name2",
            },
            "value2" : {
                "en" : "English value2",
                "xx" : "Other value2",
            }
        },
        //and some more sub-documents
    ],
}

我试图从数据库中查询它以获得以下格式:

{
    "name" : "some name",
    "specs" : [
        {
            "key" : "English key name",
            "value" : "English value",
        },
        {
            "key2" : "English key name2",
            "value2" : "English value2",
        },
        //and some more sub-documents
    ],
}

如果有可能的话怎么办呢?

背景

我制作的软件必须以多种语言提供,我认为当前的文档架构最适合这种情况(如果您对架构有更好的想法我会喜欢看他们)。

为了最大限度地减少从数据库中查询的数据量,我尝试仅使用一种语言选择数据。而且我想最小化代码中结构的嵌套,所以我搜索某种方式以某种方式从子文档中选择一个值并替换子文档。

我尝试了很多编写此类查询的方法。这是一个,但它没有像我期望的那样工作:

db.software.aggregate({
    $project : {
        "name" : true,
        "specs" : {
            "key" : "$specs.key.en",
            "value" : "$specs.value.en"
        }
    }
});

它将key转换为所有" key.en"的数组。 specs字段中的字段。 是否有办法在"specs"内引用当前数组元素而不是整个specs数组?

0 个答案:

没有答案