Primitive.ObjectID 到 Golang 中的字符串
Primitive.ObjectID to string in 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
,它是一种独特的类型。您只能从接口值中键入 assert primitive.ObjectID
。
如果您想要此 MongoDB ObjectId 的 string
表示,您可以使用它的 ObjectID.Hex()
方法来获取 ObjectId 字节的十六进制表示:
mongoId := mongoDoc["_id"]
stringObjectID := mongoId.(primitive.ObjectID).Hex()
var stringObjectId string = mongoId.(primitive.ObjectID).String()
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()
我正在尝试在 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
,它是一种独特的类型。您只能从接口值中键入 assert primitive.ObjectID
。
如果您想要此 MongoDB ObjectId 的 string
表示,您可以使用它的 ObjectID.Hex()
方法来获取 ObjectId 字节的十六进制表示:
mongoId := mongoDoc["_id"]
stringObjectID := mongoId.(primitive.ObjectID).Hex()
var stringObjectId string = mongoId.(primitive.ObjectID).String()
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()