在嵌套的Array Structure中使用node.js和mongodb聚合结果集

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在嵌套的Array Structure中使用node.js和mongodb聚合结果集相关的知识,希望对你有一定的参考价值。

在这里读了很多年并找到了好的答案后,这是我在stackoverflow上的第一篇文章,因为我遇到了node.js和mongodb的问题。

我正在开发一个具有以下数据结构的轮询系统。

mongodb Data Structure

{
    "_id" : "abcde",
    "course" : "FIAE17K",
    "poll" : "Poll1",
    "answers" : [ 
        {
            "question" : "Question1",
            "answer" : 1
        }, 
        {
            "question" : "Question2",
            "answer" : 2
        }, 
        {
            "question" : "Question3",
            "answer" : 1
        }
    ]
}

{
    "_id" : "abcd",
    "course" : "FIAE17J",
    "poll" : "Poll1",
    "answers" : [ 
        {
            "question" : "Question1",
            "answer" : 3
        }, 
        {
            "question" : "Question2",
            "answer" : 2
        }
    ]
}

我想对民意调查进行评估,并且可能希望生成这样的JSON结构......可能我需要在服务器端进行一些转换才能获得这种格式!结果数组需要收集特定问题的答案数,例如。问题1用1回答一次,用3回答一次。

The 'perfect' Result Set

[
    {
        "titel": "Question1",
        "results": [1,0,1]
    },
    {
        "titel": "Question2",
        "results": [0,2]
    },
    {
        "titel": "Question3",
        "results": [1]
    }
]

据我所知,我需要使用mongodb进行聚合函数,包括$ group语句。但我不知道如何,我开始如下......

db.antworten.aggregate([
    {$match: {"course":/FI/}},
    ?????
])
答案

我已经更接近我正在寻找的这个聚合函数:

db.anwers.aggregate([
    {$match: {"course":/FI/,"poll":"Poll1"}},
    {$unwind: "$answers"},
    {$group: {_id: "$answers",count:{$sum:1}}},
    {$sort: {_id: 1}}   
])

这产生了

{
    "_id" : {
        "question" : "Question1",
        "answer" : 1
    },
    "count" : 1.0
}

{
    "_id" : {
        "question" : "Question1",
        "answer" : 3
    },
    "count" : 1.0
}

{
    "_id" : {
        "question" : "Question2",
        "answer" : 2
    },
    "count" : 2.0
}

{
    "_id" : {
        "question" : "Question3",
        "answer" : 1
    },
    "count" : 1.0
}

可能是我在服务器端可以做的其余部分,或者是否有人找到另一个选项,以便我不必将所有冗余的问题都返回给客户端?

以上是关于在嵌套的Array Structure中使用node.js和mongodb聚合结果集的主要内容,如果未能解决你的问题,请参考以下文章

使用嵌套的 case 语句有点像循环?

如何将嵌套的json结构转换为数据框

如何在嵌套数组中找到值然后返回该父级? [关闭]

在 Firestore 中更新嵌套在 Array 中的对象

在javascript中嵌套array.some()

删除父记录时删除位于 Array 中的嵌套解析对象