package mainimport (
|
"context"
|
"go.mongodb.org/mongo-driver/mongo"
|
"go.mongodb.org/mongo-driver/mongo/options"
|
)
|
|
type MyConstantyType stringconst (
|
TheFirst MyConstantyType = "TheFirst"
|
TheSecond MyConstantyType = "TheSecond"
|
)
|
|
var myConstantyTypeDisplayNames = map[MyConstantyType]string{
|
TheFirst: "The first one",
|
TheSecond: "The second one",
|
}
|
|
func (m MyConstantyType) String() string {
|
return myConstantyTypeDisplayNames[m]
|
}
|
|
type OuterType struct {
|
Things map[MyConstantyType]int
|
}
|
|
func main() {
|
opts := options.Client().ApplyURI("mongodb://localhost")
|
client, err := mongo.Connect(context.TODO(), opts)
|
if err != nil {
|
panic(err)
|
}
|
defer client.Disconnect(context.TODO()) o := &OuterType{
|
Things: map[MyConstantyType]int{
|
TheFirst: 12312,
|
TheSecond: 9876,
|
},
|
} /*
|
We would expect the above to be stored in the database as:
|
{
|
"things": {
|
"TheFirst": 12312,
|
"TheSecond": 9876,
|
}
|
} But it is actually stored as:
|
{
|
"things": {
|
"The first one": 12312,
|
"The second one": 9876,
|
}
|
} This is because of the stringer method `String()` here, which is called from the `fmt.Sprint(key)`
|
at https://github.com/mongodb/mongo-go-driver/blob/master/bson/bsoncodec/map_codec.go#L82
|
*/
|
|
_, err = client.Database("test").Collection("test").InsertOne(context.TODO(), o) if err != nil {
|
panic(err)
|
}
|
}
|
|