Сначала используйте 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
отображение.