分组唯一编号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}
]
}
只需先按 id
和 no_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"
}
}
}
])
我有这些来自查找和展开的示例数据
{
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}
]
}
只需先按 id
和 no_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"
}
}
}
])