如何使用 golang 对 mongodb 中具有相同 user_id 的集合数据进行 $group?
How to $group the collection data having same user_id in mongodb using golang?
我正在尝试使用 golang 计算具有相同 user_id
的产品的价格总和。但我不知道我将如何得到这个。我在下面的代码中尝试了 $group
产品结构
type Product struct {
Id int `json:"id" bson:"_id"`
Name string `json:"name" bson:"name"`
Sku string `json:"sku" bson:"sku"`
Category string `json:"category" bson:"category"`
Stock int `json:"stock" bson:"stock"`
Price float64 `json:"price" bson:"price"`
Sale_price float64 `json:"sale_price" bson:"sale_price"`
UpdatedOn int64 `json:"updated_on" bson:"updated_on"`
UserId int `json:"user_id" bson:"user_id"`
}
为客户构建
type Customer struct {
Id int `json:"id" bson:"_id"`
FirstName string `json:"first_name" bson:"first_name"`
LastName string `json:"last_name" bson:"last_name"`
Email string `json:"email" bson:"email"`
PhoneNumber string `json:"phone_number" bson:"phone_number"`
}
从中检索数据的函数
func GetProducts(c *gin.Context) {
mongoSession := config.ConnectDb() //connection to database
collection := mongoSession.DB(config.Database).C(config.ProductCollection) //session
pipeline := []bson.M{
bson.M{"$group": bson.M{"user_id": 1}}, bson.M{"$sum": bson.M{"price": "price"}},
} //query i tried
fmt.Println(pipeline)
pipe := collection.Pipe(pipeline)
resp := []bson.M{}
err = pipe.All(&resp)
if err != nil {
fmt.Println("Errored: %#v \n", err)
}
fmt.Println(resp)
GetResponseList(c, response)
}
图中查看的数据-
在上图中,产品的user_id
是相同的。我想对这些数据进行分组并计算 price
.
我也阅读了 Mongodb this one 的文档,但不明白如何在 golang 中做任何人都可以简单地解释一下如何对此进行查询。谢谢
当使用 $group
分组时,您必须使用特殊的 _id
属性 来告诉您要分组的依据。
并且在引用现有属性/字段时,您必须在其名称前使用 $
符号,例如$user_id
.
除了 _id
之外,您还可以列出其他属性,其值可能是某个聚合值(例如 $sum
)。
您的管道可能如下所示:
pipeline := []bson.M{
{
"$group": bson.M{
"_id": "$user_id",
"sum_price": bson.M{"$sum": "$price"},
},
},
}
我正在尝试使用 golang 计算具有相同 user_id
的产品的价格总和。但我不知道我将如何得到这个。我在下面的代码中尝试了 $group
产品结构
type Product struct {
Id int `json:"id" bson:"_id"`
Name string `json:"name" bson:"name"`
Sku string `json:"sku" bson:"sku"`
Category string `json:"category" bson:"category"`
Stock int `json:"stock" bson:"stock"`
Price float64 `json:"price" bson:"price"`
Sale_price float64 `json:"sale_price" bson:"sale_price"`
UpdatedOn int64 `json:"updated_on" bson:"updated_on"`
UserId int `json:"user_id" bson:"user_id"`
}
为客户构建
type Customer struct {
Id int `json:"id" bson:"_id"`
FirstName string `json:"first_name" bson:"first_name"`
LastName string `json:"last_name" bson:"last_name"`
Email string `json:"email" bson:"email"`
PhoneNumber string `json:"phone_number" bson:"phone_number"`
}
从中检索数据的函数
func GetProducts(c *gin.Context) {
mongoSession := config.ConnectDb() //connection to database
collection := mongoSession.DB(config.Database).C(config.ProductCollection) //session
pipeline := []bson.M{
bson.M{"$group": bson.M{"user_id": 1}}, bson.M{"$sum": bson.M{"price": "price"}},
} //query i tried
fmt.Println(pipeline)
pipe := collection.Pipe(pipeline)
resp := []bson.M{}
err = pipe.All(&resp)
if err != nil {
fmt.Println("Errored: %#v \n", err)
}
fmt.Println(resp)
GetResponseList(c, response)
}
图中查看的数据-
在上图中,产品的user_id
是相同的。我想对这些数据进行分组并计算 price
.
我也阅读了 Mongodb this one 的文档,但不明白如何在 golang 中做任何人都可以简单地解释一下如何对此进行查询。谢谢
当使用 $group
分组时,您必须使用特殊的 _id
属性 来告诉您要分组的依据。
并且在引用现有属性/字段时,您必须在其名称前使用 $
符号,例如$user_id
.
除了 _id
之外,您还可以列出其他属性,其值可能是某个聚合值(例如 $sum
)。
您的管道可能如下所示:
pipeline := []bson.M{
{
"$group": bson.M{
"_id": "$user_id",
"sum_price": bson.M{"$sum": "$price"},
},
},
}