/ / Jak zgrupować dane kolekcji z tym samym user_id w mongodb przy użyciu golang? - mongodb, go, mgo

Jak $ zgrupować dane kolekcji o tym samym user_id w mongodb używając golang? - mongodb, idź, mgo

Staram się, aby suma ceny tego samego produktu była taka sama user_id za pomocą golanga. Ale nie wiem, jak to otrzymam Próbowałem $group w poniższym kodzie

Struct dla produktu

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"`
}

Struct dla klienta

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"`
}

funkcja, z której będą pobierane dane

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

Dane wyświetlane na obrazku-

Na powyższym obrazku user_id produktu jest taki sam. Chcę pogrupować te dane i obliczyć price.

Przeczytałem także dokumentację Mongodba ten ale nie rozumiem, jak to zrobić w Golangu, czy ktokolwiek może wyjaśnić to w prosty sposób, jak zrobić zapytanie

Odpowiedzi:

0 dla odpowiedzi № 1

Podczas grupowania za pomocą $group, musisz użyć specjalnego _id właściwość, aby powiedzieć, co chcesz grupować.

A odnosząc się do istniejących właściwości / pól, musisz użyć $ znak przed ich imionami, np. $user_id.

A poza tym _id możesz wymienić dodatkowe właściwości, których wartością może być pewna zagregowana wartość (np $sum).

Tak może wyglądać twój rurociąg:

pipeline := []bson.M{
{
"$group": bson.M{
"_id":       "$user_id",
"sum_price": bson.M{"$sum": "$price"},
},
},
}