Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/xpath/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb bson.ObjectId的nil/zero值是多少_Mongodb_Go_Bson_Objectid - Fatal编程技术网

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
或零的方法


有人知道怎么做或如何解决吗?

基于@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"`
}
我希望有帮助

基于@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
变量。也许有更好的方法实现它,但我必须查看代码段。