Mongodb bson.ObjectId的nil/zero值是多少
我在创建一元测试时遇到以下情况:Mongodb bson.ObjectId的nil/zero值是多少,mongodb,go,bson,objectid,Mongodb,Go,Bson,Objectid,我在创建一元测试时遇到以下情况: 我有一个具有外键的对象。出于某种原因,我需要切换ID,它就可以工作了。然而,有时,我需要删除这个ID。如果我有ID,我意识到某个动作,如果我没有,那么什么也不会发生 但是,我找不到将我的bson.ObjectId设置为nil或零的方法 有人知道怎么做或如何解决吗?
- 我有一个具有外键的对象。出于某种原因,我需要切换ID,它就可以工作了。然而,有时,我需要删除这个ID。如果我有ID,我意识到某个动作,如果我没有,那么什么也不会发生
bson.ObjectId
设置为nil
或零的方法
有人知道怎么做或如何解决吗?
package your_package
import "github.com/globalsign/mgo/bson"
func GenerateNewGuidHelper() *bson.ObjectId {
id := bson.NewObjectId()
return &id
}
func IsStringIdValid(id string) bool {
return id != "" && bson.IsObjectIdHex(id)
}
func ConvertStringIdToObjectId(id string) *bson.ObjectId {
if id != "" && bson.IsObjectIdHex(id){
bsonObjectId := bson.ObjectIdHex(id)
return &bsonObjectId
}
return nil
}
func ConvertStringIdsToObjectIds(ids []string) []*bson.ObjectId {
var _ids []*bson.ObjectId
for _, id := range ids {
_ids = append(_ids, ConvertStringIdToObjectId(id))
}
return _ids
}
func IsObjectIdValid(id *bson.ObjectId) bool {
return id.Hex() != "" && bson.IsObjectIdHex(id.Hex())
}
func ConvertObjectIdToStringId(id *bson.ObjectId) string {
if id != nil {
return id.Hex()
}
return ""
}
func ConvertObjectIdsToStringIds(ids []*bson.ObjectId) []string {
var _ids []string
for _, id := range ids {
_ids = append(_ids, ConvertObjectIdToStringId(id))
}
return _ids
}
另外,正如@dom所说,我现在将mongoDB ID保存为*bson.ObjectId
,而不是bson.ObjectId
。例如:
package datamodels
import (
"github.com/globalsign/mgo/bson"
)
type User struct {
ID *bson.ObjectId `protobuf:"bytes,1,opt,name=id,proto3" json:"_id,omitempty" bson:"_id,omitempty"`
}
我希望有帮助 基于@dom answer(在注释中),我现在使用的解决方法是:
package your_package
import "github.com/globalsign/mgo/bson"
func GenerateNewGuidHelper() *bson.ObjectId {
id := bson.NewObjectId()
return &id
}
func IsStringIdValid(id string) bool {
return id != "" && bson.IsObjectIdHex(id)
}
func ConvertStringIdToObjectId(id string) *bson.ObjectId {
if id != "" && bson.IsObjectIdHex(id){
bsonObjectId := bson.ObjectIdHex(id)
return &bsonObjectId
}
return nil
}
func ConvertStringIdsToObjectIds(ids []string) []*bson.ObjectId {
var _ids []*bson.ObjectId
for _, id := range ids {
_ids = append(_ids, ConvertStringIdToObjectId(id))
}
return _ids
}
func IsObjectIdValid(id *bson.ObjectId) bool {
return id.Hex() != "" && bson.IsObjectIdHex(id.Hex())
}
func ConvertObjectIdToStringId(id *bson.ObjectId) string {
if id != nil {
return id.Hex()
}
return ""
}
func ConvertObjectIdsToStringIds(ids []*bson.ObjectId) []string {
var _ids []string
for _, id := range ids {
_ids = append(_ids, ConvertObjectIdToStringId(id))
}
return _ids
}
另外,正如@dom所说,我现在将mongoDB ID保存为*bson.ObjectId
,而不是bson.ObjectId
。例如:
package datamodels
import (
"github.com/globalsign/mgo/bson"
)
type User struct {
ID *bson.ObjectId `protobuf:"bytes,1,opt,name=id,proto3" json:"_id,omitempty" bson:"_id,omitempty"`
}
我希望有帮助 或者您可以使用
NilObjectID是ObjectID的零值
或者你可以使用
NilObjectID是ObjectID的零值
这就像&string(“Hello”)。这是无效的。但是您可以将
bson.ObjectIdHex(id)
值存储到某个tmp
变量,然后将&tmp
分配给*bson.ObjectID
变量。也许有更好的方法实现它,但我必须查看代码段。这类似于&string(“Hello”)。这是无效的。但是您可以将bson.ObjectIdHex(id)
值存储到某个tmp
变量,然后将&tmp
分配给*bson.ObjectID
变量。也许有更好的方法实现它,但我必须查看代码段。