Estoy usando grpc + golang + mongodb y tengo el siguiente archivo proto .
enum InventoryType { LARGE = 0; SMALL = 1; }mi código de ir:
import ( "context" "go.mongodb.org/mongo-driver/mongo" "go.mongodb.org/mongo-driver/mongo/options" "inventory-service/pb" ) func (i *Inventory) CreateInventory(ctx context.Context, req *pb.CreateInventoryRequest) (*pb.CreateInventoryResponse, error) { inventory := req.GetInventory() data := pb.Inventory{ Inventory: inventory.GetInventory(), } mctx, _ := context.WithTimeout(context.Background(), 10*time.Second) client, _ := mongo.Connect(ctx, options.Client().ApplyURI("mongodb://localhost:27017")) collection := client.Database("test_db").Collection("test_collection") collection.InsertOne(mctx, data) return &pb.CreateInventoryResponse{}, nil }y cuando guardo la enumeración en mongodb usando golang, guarda el valor int 0, 1 en lugar de 'GRANDE', 'PEQUEÑO', ¿alguna idea sobre cómo puedo guardar una cadena en su lugar?
Protobuf es para comunicación , no para modelado de base de datos. No debe usar archivos generados por protobuf para guardar en su base de datos.
En su lugar, cree un tipo separado que modele el documento que desea almacenar en la base de datos, en el que puede almacenar la representación de cadena de su enumeración, y eso se almacenará en la base de datos.
Por ejemplo:
type MyData { Inventory string `bson:"inventory"` }Y usándolo:
data := MyData{ Inventory: inventory.GetInventory().String(), }