$ concatArrays与$ map会忽略$ concatArrays

时间:2019-06-27 06:02:24

标签: arrays mongodb aggregation-framework

我在理解以下原因为何产生不合逻辑的结果时遇到问题。
我们知道$concatArrays接受一个数组数组,并在一个数组中返回每个数组的内容。
我们知道$map接受一个数组并将元素转换为其他元素,从而导致将新数组修改为一个函数。

在合并$concatArrays中的$map时出现我的问题。以这个为例:

db.product.aggregate([
        {$replaceRoot: 
            {newRoot: {
                "_id":       "$_id",
                "availablesizes": 
                    {$concatArrays: {$map: {
                        "input": [[1],[2],[3]],
                        "in":    "$$this",
                    }},
            },
        },
    }},
]);

为了进行测试,我用结构相似的静态数组替换了变量数组“ input”。

在逻辑上进行评估... $map阶段将按字面意义返回[[1],[2],[3]],因为每个元素都按原样返回。然后$concatArrays在展平数组时应返回[1, 2, 3]
但是,实际结果是[[1],[2],[3]]

如果我删除$concatArrays,结果将保持不变

db.product.aggregate([
        {$replaceRoot: 
            {newRoot: {
                "_id":       "$_id",
                "availablesizes": 
                {$map: {
                        "input": [[1],[2],[3]],
                        "in":    "$$this",
                },
            },
        },
    }},
]);

1 个答案:

答案 0 :(得分:1)

这在MongoDB中是不可能的(至少从4.0版开始)。由于表达语言的设计。

选中https://jira.mongodb.org/browse/SERVER-31786

David Storch说:

  

对于任何这样的n元表达式,我将其称为$ nary,其语法   {$ nary:“ $ myArg”}只是{$ nary:[“ $ myArg”]}的简写。这些   两个表达的含义相同。