aggregate rewrite and set view
This commit is contained in:
parent
b63f8cc2ba
commit
305f84f0a9
@ -86,7 +86,7 @@ func Cards() {
|
|||||||
client := storage_connect()
|
client := storage_connect()
|
||||||
coll := &Collection{client.Database("serra").Collection("cards")}
|
coll := &Collection{client.Database("serra").Collection("cards")}
|
||||||
|
|
||||||
sort := bson.D{{"collectornumber", 1}}
|
sort := bson.D{{"name", 1}}
|
||||||
filter := bson.D{{}}
|
filter := bson.D{{}}
|
||||||
cards, _ := coll.storage_find(filter, sort)
|
cards, _ := coll.storage_find(filter, sort)
|
||||||
|
|
||||||
@ -110,7 +110,7 @@ func Sets() {
|
|||||||
}},
|
}},
|
||||||
}
|
}
|
||||||
|
|
||||||
sets, _ := coll.storage_aggregate(groupStage)
|
sets, _ := coll.storage_aggregate(bson.D{{"$match", bson.D{{}}}}, groupStage)
|
||||||
for _, set := range sets {
|
for _, set := range sets {
|
||||||
fmt.Printf("* %s (%.2f Eur) %.0f\n", set["_id"], set["value"], set["count"])
|
fmt.Printf("* %s (%.2f Eur) %.0f\n", set["_id"], set["value"], set["count"])
|
||||||
}
|
}
|
||||||
@ -124,29 +124,43 @@ func ShowSet(setname string) error {
|
|||||||
client := storage_connect()
|
client := storage_connect()
|
||||||
coll := &Collection{client.Database("serra").Collection("cards")}
|
coll := &Collection{client.Database("serra").Collection("cards")}
|
||||||
|
|
||||||
cards, err := coll.storage_find(bson.D{{"set", setname}}, bson.D{{"collectornumber", 1}})
|
// fetch all cards in set
|
||||||
|
cards, err := coll.storage_find(bson.D{{"set", setname}}, bson.D{{"prices.eur", -1}})
|
||||||
if (err != nil) || len(cards) == 0 {
|
if (err != nil) || len(cards) == 0 {
|
||||||
LogMessage(fmt.Sprintf("Error: Set %s not found or no card in your collection.", setname), "red")
|
LogMessage(fmt.Sprintf("Error: Set %s not found or no card in your collection.", setname), "red")
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
// print
|
// fetch set informations
|
||||||
var eur_sum float64
|
|
||||||
var card_count int64
|
|
||||||
for _, card := range cards {
|
|
||||||
fmt.Printf("%dx %d %s %.2f\n", card.SerraCount, card.CollectorNumber, card.Name, card.Prices.Eur)
|
|
||||||
eur_sum = eur_sum + card.Prices.Eur*float64(card.SerraCount)
|
|
||||||
card_count = card_count + card.SerraCount
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
setcoll := &Collection{client.Database("serra").Collection("sets")}
|
setcoll := &Collection{client.Database("serra").Collection("sets")}
|
||||||
sets, _ := setcoll.storage_find_set(bson.D{{"code", setname}}, bson.D{{"_id", 1}})
|
sets, _ := setcoll.storage_find_set(bson.D{{"code", setname}}, bson.D{{"_id", 1}})
|
||||||
|
|
||||||
LogMessage(fmt.Sprintf("\n%s\n", sets[0].Name), "green")
|
// set values
|
||||||
|
matchStage := bson.D{
|
||||||
|
{"$match", bson.D{
|
||||||
|
{"set", "mmq"},
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
groupStage := bson.D{
|
||||||
|
{"$group", bson.D{
|
||||||
|
{"_id", "$setname"},
|
||||||
|
{"value", bson.D{{"$sum", bson.D{{"$multiply", bson.A{"$prices.eur", "$serra_count"}}}}}},
|
||||||
|
{"count", bson.D{{"$sum", bson.D{{"$multiply", bson.A{1.0, "$serra_count"}}}}}},
|
||||||
|
}},
|
||||||
|
}
|
||||||
|
stats, _ := coll.storage_aggregate(matchStage, groupStage)
|
||||||
|
|
||||||
|
LogMessage(fmt.Sprintf("%s", sets[0].Name), "green")
|
||||||
LogMessage(fmt.Sprintf("Set Cards: %d/%d", len(cards), sets[0].CardCount), "normal")
|
LogMessage(fmt.Sprintf("Set Cards: %d/%d", len(cards), sets[0].CardCount), "normal")
|
||||||
LogMessage(fmt.Sprintf("Total Cards: %d", card_count), "normal")
|
LogMessage(fmt.Sprintf("Total Cards: %.0f", stats[0]["count"]), "normal")
|
||||||
LogMessage(fmt.Sprintf("Value: %.2f Eur", eur_sum), "normal")
|
LogMessage(fmt.Sprintf("Value: %.2f", stats[0]["value"]), "normal")
|
||||||
|
LogMessage(fmt.Sprintf("Released: %s", sets[0].ReleasedAt), "normal")
|
||||||
|
|
||||||
|
LogMessage(fmt.Sprintf("\nMost valuable cards"), "purple")
|
||||||
|
for i := 0; i < 10; i++ {
|
||||||
|
card := cards[i]
|
||||||
|
fmt.Printf("%dx %s (%s/%d) %.2f EUR\n", card.SerraCount, card.Name, sets[0].Code, card.CollectorNumber, card.Prices.Eur)
|
||||||
|
}
|
||||||
|
|
||||||
storage_disconnect(client)
|
storage_disconnect(client)
|
||||||
return nil
|
return nil
|
||||||
@ -212,7 +226,7 @@ func Stats() {
|
|||||||
{"count", bson.D{{"$sum", 1}}},
|
{"count", bson.D{{"$sum", 1}}},
|
||||||
}}}
|
}}}
|
||||||
|
|
||||||
sets, _ := coll.storage_aggregate(groupStage)
|
sets, _ := coll.storage_aggregate(bson.D{{"$match", bson.D{{}}}}, groupStage)
|
||||||
for _, set := range sets {
|
for _, set := range sets {
|
||||||
// TODO fix primitiveA Problem with loop and reflect
|
// TODO fix primitiveA Problem with loop and reflect
|
||||||
fmt.Printf("* %s %d\n", set["_id"], set["count"])
|
fmt.Printf("* %s %d\n", set["_id"], set["count"])
|
||||||
|
|||||||
@ -99,13 +99,13 @@ func (coll Collection) storage_remove(filter bson.M) error {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (coll Collection) storage_aggregate(groupstage bson.D) ([]primitive.M, error) {
|
func (coll Collection) storage_aggregate(matchstage, groupstage bson.D) ([]primitive.M, error) {
|
||||||
|
|
||||||
// db.cards.aggregate([ {$group: { _id: "$setname", sum: { $sum: "$prices.eur"}}}])
|
// db.cards.aggregate([ {$group: { _id: "$setname", sum: { $sum: "$prices.eur"}}}])
|
||||||
opts := options.Aggregate().SetMaxTime(2 * time.Second)
|
opts := options.Aggregate().SetMaxTime(2 * time.Second)
|
||||||
cursor, err := coll.Aggregate(
|
cursor, err := coll.Aggregate(
|
||||||
context.TODO(),
|
context.TODO(),
|
||||||
mongo.Pipeline{groupstage},
|
mongo.Pipeline{matchstage, groupstage},
|
||||||
opts)
|
opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Fatal(err)
|
log.Fatal(err)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user