Mongodb:如何按对象列表分组

Mongodb:如何按对象列表分组,mongodb,grails,groovy,gorm,Mongodb,Grails,Groovy,Gorm,我有一个下面的学生集合,它有列表可选,并且正在按列表聚合集合组 { "_id" : "57e3e55c638cb8b971", "firstName" : "St1_firstName", "lastName" : "St1_lastName", "email" : "St1_firstname.lastName@xxx.com", "subjects" : [ { "_id" : "35a344d888dd8

我有一个下面的学生集合,它有列表可选,并且正在按列表聚合集合组

   {
    "_id" : "57e3e55c638cb8b971",
    "firstName" : "St1_firstName",
    "lastName" : "St1_lastName",
    "email" : "St1_firstname.lastName@xxx.com",
    "subjects" : [
        {
            "_id" : "35a344d888dd8b363",
            "code" : "00 00 00",
            "name" : "subject1"
        },
        {
            "_id" : "23a344d888dd8b335",
            "code" : "01 00 00",
            "name" : "subject2"
        },
        {
            "_id" : "45a344d888dd8b987",
            "code" : "01 01 00",
            "name" : "subject3"
        }
    ],
    "category" : {
        "_id" : "76a344d888dd8b887",
        "label" : "label"
    },
    "classroom" : {
        "_id" : "5877df01937e1f97942c9e06"
    }
}
下面是用于按列表聚合集合组的GORM代码段

DBObject unwind =  new BasicDBObject('_id',new BasicDBObject('$unwind','$subjects'))
        unwind.append('subjects','$subjects.code')
        unwind.append('count', new BasicDBObject('$sum', 1))
        DBObject group = new BasicDBObject('$group', unwind)
        queryPipe << group
这不起作用,你能更正代码吗 当我尝试使用以下完整代码时获取NullPointerException

List queryPipe = []
        DBObject matchclassroom = new BasicDBObject('$match', new BasicDBObject('classroom', params.classroom))
        queryPipe << matchclassroom

        final DBObject unwind = new BasicDBObject('$unwind', '$students')
        final DBObject groupFields = new BasicDBObject('_id', '$students.code')
        groupFields.put("count", new BasicDBObject('$sum', 1))
        final DBObject group = new BasicDBObject('$group', groupFields)
        queryPipe << group

        List facetsList = []
        Student.collection.aggregate(queryPipe).each { fct ->

                def studentsList = fct.'_id'.student

        }

您在代码结构方面犯了一些错误

DBObject unwind =  new BasicDBObject('_id',new BasicDBObject('$unwind','$subjects'))
这里,创建$unwind对象

DBObject group = new BasicDBObject('$group', unwind)

这里,创建$group对象。但是,您为$group对象的内部添加了$unwind对象。

我需要统计出现的次数,这是用于展开的方式。追加'count',新的BasicDBObject'$sum',1设置无效运算符'$unwind error',即使我正在使用上述两行代码,为什么您要将unwind pipeline对象分配给$group pipeline对象,你能告诉我你遇到了什么错误吗?试着这样做,DBObject unwind=new basicdbobobject''u id',new basicdbobobject'$unwind','$subjects';DBObject group=new BasicDBObject['$group':['\u id':'$subjects.code','count':['$sum':1]];AggregationOutput AggregationOutput=collection.aggregate[unwind,group];aggregationOutput.results.each{dbObject->//对结果做点什么}在上述代码实现List queryPipe=[]dbObject matchroom=new BasicDBObject'$match',new BasicDBObject'School',params.planroom queryPipe然后Studen.collection.aggregatequeryPipe.each之前{fct->String subjectId=fct.''u id'。如果subjectId{subjectInfo=Subject.getsubjectId?.properties.subMap'id',label'}facetsList,主题映射subjectInfo是否有任何更新?