分组唯一编号Mongodb

Grouping unique number Monngodb

我有这些来自查找和展开的示例数据

{
  id: 1a1,
  package:2ab,
  question:{
  no_soal:1,
  score:10
  },
  id: 1a1,
  package:2ab,
  question:{
  no_soal:1,
  score:20
  },
  id: 1a1,
  package:2ab,
  question:{
  no_soal:2,
  score:20
  },
  id: 1a1,
  package:2ab,
  question:{
  no_soal:3,
  score:5
  },
  id: 1a1,
  package:2ab,
  question:{
  no_soal:4,
  score:10
  },
  id: 1a1,
  package:2ab,
  question:{
  no_soal:4,
  score:20
  },
  id: 1b2,
  package:1ab,
  question:{
  no_soal:1,
  score:10
  },
  id: 1b2,
  package:1ab,
  question:{
  no_soal:2,
  score:10
  },
}

好吧,我必须按 ID 和包对其进行分组,并将问题作为数组对象,如下所示。 no_soal 必须包含取自第一个数据的唯一编号。这是预期输出

{
  id:1a1,
  package:2ab,
  question:[
    {no_soal:1,score:10},{no_soal:2,score:20},{no_soal:3,score:5},{no_soal:4,score:10}
  ]
},
{
  id:1b2,
  package:1ab,
  question:[
    {no_soal:1,score:10},{no_soal:2,score:10}
  ]
}

现在我已经可以用这个代码重新组合它了:

{
 $group:{
  "id": "$id",
  "package": {
    "$first": "$package"
  },
  "question": {
    "$push": "$question"
  }
 }
}

但仍与预期输出不一样。问题字段仍然不包含唯一编号,有点混淆如何做到这一点。你们能告诉我我应该在这段代码中添加什么吗?感谢您尝试回答这个问题

这是我从我编写的代码中得到的错误输出

 {
  id:1a1,
  package:2ab,
  question:[
    {no_soal:1,score:10}{no_soal:1,score:20},{no_soal:2,score:20},{no_soal:3,score:5}, 
    {no_soal:4,score:10},{no_soal:4,score:20}
  ]
},
{
  id:1b2,
  package:1ab,
  question:[
    {no_soal:1,score:10},{no_soal:2,score:10}
  ]
}

只需先按 idno_soal 分组以删除任何等效项,然后按 id 正常分组。您的示例数据和查询包含一些格式错误,但是:

db.collection.aggregate([
  {
    $group: {
      "_id": {
        "id": "$id",
        "no_soal": "$question.no_soal"
      },
      "package": {
        "$first": "$package"
      },
      "question": {
        "$first": "$question"
      }
    }
  },
  {
    $group: {
      "_id": "$_id.id",
      "package": {
        "$first": "$package"
      },
      "question": {
        "$addToSet": "$question"
      }
    }
  }
])

mongoplayground