当前位置: 首页 > 面试题库 >

使用mgo强制进行类型映射

郝哲茂
2023-03-14
问题内容

_id成员的类型仅从bson.ObjectId派生时,不再映射为ObjectId类型:

import (
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
)

type CustomId bson.ObjectId

type Foo struct {
    ID1    CustomId `bson:"_id"` // broken
    ID2    bson.ObjectId         // mapped as expected
}


func main() {
    session, _ := mgo.Dial("127.0.0.1")
    coll := session.DB("mgodemo").C("foocoll")

    doc := Foo{
        CustomId(bson.NewObjectId()),
        bson.NewObjectId(),
    }

    coll.Insert(doc)
}

id 在Mongo中应该是一个 _ObjectId 。但是事实证明,选择了 字符串

Mongo Shell:

> db.foocoll.findOne()
{ "_id" : "XvMn]K� �\f:�", "id2" : ObjectId("58764d6e5d4be120fa0c3ab1") }  // id2 is OK ...

> typeof db.foocoll.findOne()._id
string  // OOps. Should be ObjectId !

这可能是有意的,因为 bson.ObjectId 本身是从 string 派生的。但是在这里,这对我们不利。

我们可以告诉mgo将_id映射到数据库中的ObjectId吗?


问题答案:

使用Setter和Getter接口控制mongo中的表示形式:

type CustomId bson.ObjectId

func (id *CustomId) SetBSON(raw bson.Raw) error {
   var v bson.ObjectId
   err := raw.Unmarshal(&v)
   *id = CustomId(v)
   return err
}
func (id CustomId) GetBSON() (interface{}, error) {
   return bson.ObjectId(id), nil
}


 类似资料:
  • 我在Kotlin中有一个方法,它返回一个泛型列表的Rx可观察值: 因为Kotlin list特征定义为,Java将看到返回类型为。 是否有一种方法告诉Kotlin编译器,Java应该将其视为?

  • 问题内容: 我不明白为什么在尝试执行以下操作时会收到警告(未经检查的演员表): 我的意思是将castedMap发布到外部代码的危险是什么?两种操作均可在运行时完美运行: 使用SomeType类型的键从castedMap获取元素 使用SomeType类型的键将元素放入castedMap中。 我只是使用@SuppressWarnings(“ unchecked”)取消警告。 问题答案: 答案可能很无聊

  • 强制类型转换 隐式类型转换:隐式类型转换又称为自动类型转换,隐式类型转换可分为三种:算术转换、赋值转换和输出转换。 显式类型转换:显式类型转换又称为强制类型转换,指的是使用强制类型转换运算符,将一个变量或表达式转化成所需的类型,这种类型转换可能会造成数据的精度丢失。 数据有不同的类型,不同类型数据之间进行混合运算时必然涉及到类型的转换问题。 转换的方法有两种: 自动转换(隐式转换):遵循一定的规则

  • 问题内容: 我有下表: 我需要将其映射到对象: 在哪里,StronglyTypedData类似于: 默认情况下,XML列映射到XmlDocument属性,但是我希望XML序列化/反序列化到StronglyTypedData属性发生在映射时。 我需要怎么做才能做到这一点? 问题答案: 您需要编写一个负责转换的。 您可以从XmlDocType开始,它实际上是从原始XML转换为XmlDocument的那

  • 问题内容: 我看到了这小段代码正在逃避我的理解: 将输出: 我了解使用PHP时会尝试进行模糊比较,在类型之间进行无提示转换以执行比较。我 不 明白的是为什么PHP似乎认为这两个字符串是相同的。因为我本来以为和都是字符串,没有类型转换需要发生。 我不明白什么? 问题答案: 我认为这篇文章解释得很好: 类型强制比较运算符会将数字字符串转换为数字 仅在这里引用主要问题: 根据php language.o

  • 我有疑问。我写了一个流类型检查器来检查我的减速器。有一个错误,你能给我解释一下错误的原因吗。这是我的密码。 这是错误。 错误------------------------------------------------------------------------------------------------------------------------------------------