如何在go mgo驱动程序中使用$ push和$ each?

I have a created a basic nested structure:

type Komplex struct {
count int    `bson:"count"`
text  string `bson:"text"`
}

type Parent struct {
Count    int       `bson:"count"`
SubCount []Komplex `bson:"subcount"`
}

And i would like to use mongo's safe update feature to extend a collection:

session.DB("test").C("ints").Upsert(bson.M{"count": toWrite.Count},
  bson.M{"$addToSet": bson.M{"subcount": bson.M{"$each": toWrite.SubCount}}})

This works when i replace the Komplex struct with a slice of just int. However when i try to follow a complex set addition with my Komplex struct like described at https://docs.mongodb.org/manual/reference/operator/update/push/#up._S_push nothing gets inserted.

How do i properly marshal my slice with structs to bson.M in this situation?

Maybe work only for this code :

session.DB("test").C("ints").Update(bson.M{"count": toWrite.Count},
bson.M{"$addToSet": bson.M{"subcount": bson.M{"$each":  toWrite.SubCount}}}
)

Your Golang code should be like:

data := model.Komplex {
            count: 12345,
            text: "yourText",
        }


selector := bson.M{"count": toWrite.Count}
changes := bson.M{"$addToSet": bson.M{"subcount": bson.M{"$each": []model.Komplex{data}}}}
err = c.Update(selector, changes)

You have shared the reference link which deals with a $push but you are using $addToSet in your query.

$push - appends the array even if the data is duplicate

$addToSet- keeps only distinct values in the array

Also, I'd like to suggest you to include an _id field in the Parent struct.