在golang/mongodb聚合查询中,复合字面量中缺少类型。

huangapple go评论108阅读模式
英文:

missing type in composite literal in golang/mongodb aggregate query

问题

我可以帮你翻译Mongo查询和Go代码。以下是翻译的结果:

Mongo查询:

  1. aggregate([
  2. {$match: {$and :
  3. [
  4. {"stream" : "CS"},
  5. {"semester" : "sem3"},
  6. {"section" : "A"}
  7. ]
  8. }},
  9. {$unwind: '$atndnc'},
  10. { $group: { _id:{rollno: "$atndnc.rollno",attend:"$atndnc.attend"},count: { $sum: 1 }}},
  11. { $project:
  12. { _id: '$_id.rollno',
  13. 'attend' : '$_id.attend',
  14. 'count' : '$count'
  15. }}
  16. ])

Go代码:

  1. cond := []bson.M{
  2. bson.M{"$match": bson.M{"$and": []interface{}{
  3. bson.M{"stream": srchobj.Stream},
  4. bson.M{"semester": srchobj.Semester},
  5. bson.M{"section": srchobj.Section},
  6. bson.M{"college_id": srchobj.College_id},
  7. bson.M{"date": bson.M{"$gt": srchobj.Startdate, "$lt": srchobj.Enddate}},
  8. }}},
  9. bson.M{"$unwind": "$atndnc"},
  10. bson.M{"$group": bson.M{"_id": bson.M{"rollno": "$atndnc.rollno", "attend": "$atndnc.attend"}, "count": bson.M{"$sum": 1}}},
  11. bson.M{"$project": bson.M{"_id": "$_id.rollno", "count": "$_id.count"}},
  12. }

在这段代码中,你遇到了一个错误:"missing type in composite literal",出现在以下这行代码中:

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

这个错误是因为你在bson.M中使用了$atndnc.rollno$atndnc.attend作为键名,但是它们应该是字符串而不是bson.M类型。你需要将它们改为字符串,如下所示:

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

这样修改后的代码应该就没有错误了。希望对你有帮助!

英文:

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

  1. aggregate([
  2. {$match: {$and :
  3. [
  4. {"stream" : "CS"},
  5. {"semester" : "sem3"},
  6. {"section" : "A"}
  7. ]
  8. }},
  9. {$unwind: '$atndnc'},
  10. { $group: { _id:{rollno: "$atndnc.rollno",attend:"$atndnc.attend"},count: { $sum: 1 }}},
  11. { $project:
  12. { _id: '$_id.rollno',
  13. 'attend' : '$_id.attend',
  14. 'count' : '$count'
  15. }}
  16. ])

And my Go code is -

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

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

  1. 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?

答案1

得分: 2

你的$group查询中的一组大括号缺少类型声明:

{"rollno":bson.M{"$atndnc.rollno"},"attend":bson.M{"$atndnc.attend"}}

我认为应该是:

bson.M{"rollno":bson.M{"$atndnc.rollno"},"attend":bson.M{"$atndnc.attend":nil}}

还有一些其他的初始化问题,比如只用一个字符串键进行初始化(记住,bson.M只是map[string]interface{}的别名)。

英文:

You have a missing type declaration on a set of braces in your $group query:

I would assume should be:

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{}

答案2

得分: 0

感谢您的支持。通过这样做,我得到了所需的输出。

  1. cond := []bson.M{
  2. bson.M{"$match": bson.M{
  3. "stream": srchobj.Stream,
  4. "semester": srchobj.Semester,
  5. "section": srchobj.Section,
  6. "college_id": srchobj.College_id,
  7. "date": bson.M{
  8. "$gt": srchobj.Startdate,
  9. "$lt": srchobj.Enddate},
  10. },
  11. },
  12. bson.M{"$unwind": "$atndnc"},
  13. bson.M{"$group": bson.M{
  14. "_id": bson.M{
  15. "rollno": "$atndnc.rollno",
  16. "attend": "$atndnc.attend",
  17. "name": "$atndnc.name",
  18. },
  19. "count": bson.M{"$sum": 1},
  20. },
  21. },
  22. bson.M{"$project": bson.M{
  23. "rollno": "$_id.rollno",
  24. "name": "$_id.name",
  25. "count": "$count",
  26. "attend": "$_id.attend",
  27. },
  28. },
  29. bson.M{"$sort": bson.M{"rollno": 1}},
  30. }
英文:

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

  1. cond :=[]bson.M{
  2. bson.M{"$match": bson.M{
  3. "stream" : srchobj.Stream,
  4. "semester" : srchobj.Semester,
  5. "section" : srchobj.Section,
  6. "college_id":srchobj.College_id,
  7. "date":bson.M{
  8. "$gt":srchobj.Startdate,
  9. "$lt":srchobj.Enddate},
  10. },
  11. },
  12. bson.M{"$unwind": "$atndnc"},
  13. bson.M{"$group":bson.M{
  14. "_id":bson.M{
  15. "rollno":"$atndnc.rollno",
  16. "attend":"$atndnc.attend",
  17. "name":"$atndnc.name",
  18. },
  19. "count":bson.M{"$sum":1},
  20. },
  21. },
  22. bson.M{"$project":bson.M{
  23. "rollno":"$_id.rollno",
  24. "name":"$_id.name",
  25. "count":"$count",
  26. "attend":"$_id.attend",
  27. },
  28. },
  29. bson.M{"$sort":bson.M{"rollno":1}},
  30. }

huangapple
  • 本文由 发表于 2016年4月13日 02:15:56
  • 转载请务必保留本文链接:https://go.coder-hub.com/36581072.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定