我很难理解为什么下面的内容会产生不合逻辑的结果。
我们知道$concatArrays
接收一个数组,并在一个数组中返回每个数组的内容。
我们知道$map
接收数组并将元素转换为其他元素,这将导致修改为一个函数的新数组。
我的问题发生在组合一个$concatArrays
的$map
时。举个例子:
db.product.aggregate([
{$replaceRoot:
{newRoot: {
"_id": "$_id",
"availablesizes":
{$concatArrays: {$map: {
"input": [[1],[2],[3]],
"in": "$$this",
}},
},
},
}},
]);
为了进行测试,我将变量数组“输入”替换为类似结构的静态数组。
按逻辑计算. $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",
},
},
},
}},
]);
发布于 2019-06-26 23:18:00
这在MongoDB中是不可能的(至少在4.0版中是如此)。由于表达语言的设计。
检查https://jira.mongodb.org/browse/SERVER-31786。
大卫·斯托奇说:
对于任何这样的n进制表达式,我将称之为$nary,语法{$nary:"$myArg"}只是{$nary:"$myArg"}的缩写。这两种表达在意义上是一致的。
https://stackoverflow.com/questions/56784823
复制