我在理解以下原因为何产生不合逻辑的结果时遇到问题。
我们知道$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",
},
},
},
}},
]);
答案 0 :(得分:1)
这在MongoDB中是不可能的(至少从4.0版开始)。由于表达语言的设计。
选中https://jira.mongodb.org/browse/SERVER-31786。
David Storch说:
对于任何这样的n元表达式,我将其称为$ nary,其语法 {$ nary:“ $ myArg”}只是{$ nary:[“ $ myArg”]}的简写。这些 两个表达的含义相同。