Что такое ноль / ноль значения bson.ObjectId - PullRequest
0 голосов
/ 16 декабря 2018

Я создавал унарные тесты, когда застрял в следующей ситуации:

  • У меня есть объект с внешним ключом.По какой-то причине мне нужно переключить идентификатор, и это работает.Однако иногда мне нужно удалить этот идентификатор.Если у меня есть идентификатор, я выполняю определенное действие, а если нет, то ничего не происходит.

Однако я не могу найти способ установить bson.ObjectId как nilили ноль.

Кто-нибудь знает, как это сделать или обойти?

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018

Основываясь на ответе @dom (в комментариях), есть обходной путь, который я сейчас использую:

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 как *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"`
}

Надеюсь, это поможет!

0 голосов
/ 16 декабря 2018

bson.ObjectId - псевдоним для строки, поэтому нулевое значение - пустая строка ""

...