1 回答
TA贡献1946条经验 获得超3个赞
首先,使用bson.D{}而不是bson.M{}。这是因为bson.D{}
应该在顺序很重要的情况下使用,例如 MongoDB 命令。
您还可以将整个管道封装在mongo.Pipeline中。例如:
pipeline := mongo.Pipeline{
{{"$match", bson.D{{"createdata", 10}}}},
{{"$group", bson.D{
{"_id", bson.D{{"type", "$type"}}},
{"TotalFeeds", bson.D{{"$sum", 1}}},
}}},
{{"$project", bson.D{
{"type", "$_id.type"},
{"TotalFeeds", "$TotalFeeds"},
{"_id", 0}},
}},
}
检查你的Feeds{}结构映射。确保您指定映射bson,即:
type Feeds struct {
Type string `bson:"type"`
TotalFeeds int `bson:"TotalFeeds"`
}
或者,在您的投影阶段,$project您对字段使用一致的大小写。例如,指定所有小写type和/totalfeeds或所有大写Type和TotalFeeds。
pipeline := mongo.Pipeline{
{{"$match", bson.D{{"createdata", 10}}}},
{{"$group", bson.D{
{"_id", bson.D{{"type", "$type"}}},
{"totalfeeds", bson.D{{"$sum", 1}}},
}}},
{{"$project", bson.D{
{"type", "$_id.type"},
{"totalfeeds", "$totalfeeds"},
{"_id", 0}},
}},
}
然后你不必bson在结构中指定映射:
type MyStruct struct {
Type string
Total int
}
因此,要么在结构中使用一致的字段名称大小写,要么显式提供映射bson。
- 1 回答
- 0 关注
- 150 浏览
添加回答
举报