Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb $concatarray不适用于现有的多数组字段_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb $concatarray不适用于现有的多数组字段

Mongodb $concatarray不适用于现有的多数组字段,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有这个示例文档,其中键值设置为数组数组 { _id: 1, items: [ [1, 2, 3], [4, 5, 6] ] } 这是我的聚合函数 db.collection.aggregate([ { $project: { items: { $concatArrays: "$items" } } } ]) 结果应该是: { _id: 1, items: [1, 2, 3, 4, 5, 6] } 然而,结果是: { _id: 1, items: [ [1, 2, 3], [4,

我有这个示例文档,其中键值设置为数组数组

{ _id: 1, items: [ [1, 2, 3], [4, 5, 6] ] }
这是我的聚合函数

db.collection.aggregate([

   { $project: { items: { $concatArrays: "$items" } } }

])
结果应该是:

{ _id: 1, items: [1, 2, 3, 4, 5, 6] }
然而,结果是:

{ _id: 1, items: [ [1, 2, 3], [4, 5, 6] ] }
是否有其他方法实现所需的输出?我知道我可以使用
lodash
.flattedeep(items)
,但我正在寻找mongodb解决方案


这是我的

你可以在下面使用

db.collection.aggregate([
  { "$project": {
    "items": {
      "$reduce": {
        "input": "$items",
        "initialValue": [],
        "in": { "$concatArrays": ["$$this", "$$value"] }
      }
    }
  }}
])

我看到你已经得到了答案,但我将简要解释为什么古玩爱好者会有这种行为

这实际上是Mongo的一个“特性”,有一个你可以跟踪的开放式窗口。但首先让我们了解它是什么:

有一类表达式接受多个参数,以数组形式表示。(在代码中,它们继承自ExpressionNary。)对于任何这样的n元表达式,我将其称为$nary,语法{$nary:“$myArg”}只是{$nary:[“$myArg”]}的简写。这两个表达的意思相同

所以这类独特的表达式包含许多运算符,其中一个是。Mongo的表达式语言只是将这些运算符的任何“$arg”解析为['$arg']。
这就是为什么在使用
$dups
表达式时会出现“意外”行为,但在显式写入相同的值时不会发生这种行为。

虽然这会产生所需的结果,但如果要串联在一起的数组数量很重要,则使用这种方法时性能可能是一个主要问题。仅供参考,此方法用于