Primitive.ObjectID到Golang中的字符串



我正在尝试在Go中将类型primitive.ObjectID转换为类型string。我正在使用go.mongodb.org/mongo-driver中的mongo-driver

我尝试使用类型断言,如-

mongoId := mongoDoc["_id"];
stringObjectID := mongoId.(string)

哪个VSCode接受。代码被编译,当它到达这一特定的代码行时,它会抛出这个错误

panic: interface conversion: interface {} is primitive.ObjectID, not string

错误消息告诉mongoDoc["_id"]的类型为interface{},其中包含primitive.ObjectID类型的值。这不是一个string,它是一个不同的类型。只能从接口值中键入assertprimitive.ObjectID

如果你想要这个MongoDB ObjectId的string表示,你可以使用它的ObjectID.Hex()方法来获得ObjectId字节的十六进制表示:

mongoId := mongoDoc["_id"]
stringObjectID := mongoId.(primitive.ObjectID).Hex()

2021年的情况发生了变化。这里有一个更简单的方法。它让用户从模型中询问它是什么类型的界面,然后所有的都很好

var user models.User
query := bson.M{"$or": []bson.M{{"username": data["username"]}, {"email": data["username"]}}}
todoCollection := config.MI.DB.Collection(os.Getenv("DATABASE_COLLECTION_USER"))
todoCollection.FindOne(c.Context(), query).Decode(&user)
stringObjectID := user.ObjectID.Hex()

以上代码适用于此接口:

type User struct {
ObjectID primitive.ObjectID `bson:"_id" json:"_id"`
// Id        string    `json:"id" bson:"id"`
Username      string    `json:"username" gorm:"unique" bson:"username,omitempty"`
Email         string    `json:"email" gorm:"unique" bson:"email,omitempty"`
Password      []byte    `json:"password" bson:"password"`
CreatedAt     time.Time `json:"createdat" bson:"createat"`
DeactivatedAt time.Time `json:"updatedat" bson:"updatedat"`
}

因此:这3行代码会做得很好:

objectidhere := primitive.NewObjectID()
stringObjectID := objectidhere.Hex()
filename_last := filename_rep + "_" + stringObjectID + "." + fileExt

现在你只需要做mongoId.Hex((

var stringObjectId string = mongoId.(primitive.ObjectID).String()

相关内容

  • 没有找到相关文章

最新更新