首页 > 解决方案 > MongoDB 所有字段上的 Concat 数组

问题描述

想象一下我有这个系列:

{
  id: 1,
  b: { 
   "field1": ['foo'],
   "field2": ['bar']
  }
}
{
  id: 2,
  b: { 
   "field2": ["foobar"],
   "field3": ["foofoo"]
  }
}

我想用 MongoDB 获得一个新的集合:

{
 id: 1,
 b_grouped: ['foo', 'bar']
}
{
 id: 2,
 b_grouped: ["foobar", "foofoo"]
}

我不知道文档中所有字段的名称,任何人都会知道如何执行以下操作:

db.collection.aggregate(
   [
      { "$project": { "b_grouped": { $concatArrays: ["$b.*"] } } }
   ]
)

标签: mongodbaggregation-framework

解决方案


你可以试试,

  • 使用$objectToArrayb从对象转换为数组后,将$reduce输入作为数组,这会将对象转换为“k”(键)、“v”(值)格式的对象数组,
  • $concatArrays到对象字段$$this.v的concat initialValue ($$value)$raduce和数组b
db.collection.aggregate([
  {
    $project: {
      b_grouped: {
        $reduce: {
          input: { $objectToArray: "$b" },
          initialValue: [],
          in: {
            $concatArrays: ["$$this.v", "$$value"]
          }
        }
      }
    }
  }
])

操场


推荐阅读