Hossain Ahamed
Hossain Ahamed

Reputation: 119

missing type in composite literal in golang/mongodb aggregate query

I want to write mongo query in golang. my mongo query is -

aggregate([
    {$match: {$and :
        [
            {"stream" : "CS"},
            {"semester" : "sem3"},
            {"section" : "A"}
        ]

    }},
    {$unwind:  '$atndnc'},
    { $group: { _id:{rollno: "$atndnc.rollno",attend:"$atndnc.attend"},count: { $sum: 1 }}},
    {  $project:
    {  _id: '$_id.rollno',
        'attend' : '$_id.attend',
        'count' : '$count'
    }}
])

And my Go code is -

cond:=[]bson.M{
    bson.M{"$match": bson.M{"$and ":[]interface{}{
        bson.M{"stream" : srchobj.Stream},
        bson.M{"semester" : srchobj.Semester},
        bson.M{"section" : srchobj.Section},
        bson.M{"college_id":srchobj.College_id},
        bson.M{"date":bson.M{"$gt":srchobj.Startdate,"$lt":srchobj.Enddate}}}}},
    bson.M{"$unwind":  "$atndnc"},
    bson.M{"$group":bson.M{"_id":{"rollno":bson.M{"$atndnc.rollno"},"attend":bson.M{"$atndnc.attend"}},"count":bson.M{"$sum":1}}},
    bson.M{"$project":bson.M{"_id":"$_id.rollno","count":"$_id.count"}}}

but it give the error "missing type in composite literal" in

    bson.M{"$group":bson.M{"_id":{"rollno":bson.M{"$atndnc.rollno"},"attend":bson.M{"$atndnc.attend"}},"count":bson.M{"$sum":1}}},

in this line.what should i do now?

Upvotes: 1

Views: 3045

Answers (2)

Hossain Ahamed
Hossain Ahamed

Reputation: 119

Thanks for your support.I got the desired output by doing this.

cond :=[]bson.M{
    bson.M{"$match": bson.M{
            "stream" : srchobj.Stream,
            "semester" : srchobj.Semester,
            "section" : srchobj.Section,
            "college_id":srchobj.College_id,
            "date":bson.M{
                "$gt":srchobj.Startdate,
                "$lt":srchobj.Enddate},
     },
    },
    bson.M{"$unwind":  "$atndnc"},
    bson.M{"$group":bson.M{
        "_id":bson.M{
            "rollno":"$atndnc.rollno",
            "attend":"$atndnc.attend",
            "name":"$atndnc.name",
            },
        "count":bson.M{"$sum":1},
        },
    },
    bson.M{"$project":bson.M{
        "rollno":"$_id.rollno",
        "name":"$_id.name",
        "count":"$count",
        "attend":"$_id.attend",
        },
    },
    bson.M{"$sort":bson.M{"rollno":1}},
}

Upvotes: 0

Corvus Crypto
Corvus Crypto

Reputation: 2291

You have a missing type declaration on a set of braces in your $group query: {"rollno":bson.M{"$atndnc.rollno"},"attend":bson.M{"$atndnc.attend"}}

I would assume should be: bson.M{"rollno":bson.M{"$atndnc.rollno"},"attend":bson.M{"$atndnc.attend":nil}}

there are also a few other initialization things like initializations with just a string key (remember, a bson.M is just an alias for map[string]interface{}

Upvotes: 2

Related Questions