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
表达式时会出现“意外”行为,但在显式写入相同的值时不会发生这种行为。虽然这会产生所需的结果,但如果要串联在一起的数组数量很重要,则使用这种方法时性能可能是一个主要问题。仅供参考,此方法用于