Mongodb 按记录分组,生成新的ObjectId,并更改结果集结构

Mongodb 按记录分组,生成新的ObjectId,并更改结果集结构,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我正在制作一个包含乐队和流派记录的音乐数据库,每个乐队都有多种流派。 我从CSV导入了数据,并获得了一个如下所示的集合: 我现在打算做的是创建一个新的流派集合,这是通过流派名称聚合此集合的结果,允许将不同类型的流派分开放置 为此,我成功创建了以下聚合操作: db.tempBandGenres.aggregate([ { $group: { _id: { name: "$genre_name"

我正在制作一个包含乐队和流派记录的音乐数据库,每个乐队都有多种流派。 我从CSV导入了数据,并获得了一个如下所示的集合:

我现在打算做的是创建一个新的流派集合,这是通过
流派名称
聚合此集合的结果,允许将不同类型的流派分开放置

为此,我成功创建了以下聚合操作:

db.tempBandGenres.aggregate([
    {
        $group: {
            _id: {
                name: "$genre_name"
            }
        }
    },
    {
        $out: "genres"
    }
])
正如预期的那样,这将输出一组表示流派的文档:

现在有两件事我想做,但不知道如何做:向流派集合中的每条记录添加一个新的
ObjectId
,并更改每个文档的结构,使
name
属性不是
\u id
元素的一部分,而是根元素的一个属性

因此,最终收集的记录示例如下:


谢谢

您只需在$out之前构建结果

  • $group
    流派(名称
    )进行分组并首先获取
    \u id
  • $project
    显示必填字段

谢谢你的回复。这个建议让我解决了身份证问题!但是关于结构,我现在有了一个name对象,其中包含一个子name,在$project阶段改为name:“$\u id.id”,解决了第二个问题!感谢您必须查看我使用的
$group
阶段
\u id:“$genre\u name”
它应该可以工作
db.tempBandGenres.aggregate([
  {
    $group: {
      _id: "$genre_name",
      id: { $first: "$_id" }
    }
  },
  {
    $project: {
      _id: "$id",
      name: "$_id"
    }
  },
  { $out: "genres" }
])