gpt4 book ai didi

mongodb - 查询由 C# 驱动程序插入的带有 _t 定义的记录

转载 作者:IT王子 更新时间:2023-10-29 02:06:53 25 4
gpt4 key购买 nike

我想查询由具有多态性的 C# mongodriver 插入的数据。查询将由 Golang 驱动程序完成。数据结构如下所示。我想将 _t 映射到结构体,换句话说,我想在 Go 中应用多态性来记录。是否可以在 Golang mongo 驱动程序中执行此操作?结构列表也在下面。

来自 mongo 集合的一个记录示例

{"_id" : "asdasda12312312asdasda",
"structure" : [
{
"_t" : "AObject",
"Text" : "asdasdasda",
"State" : "asdasda"
},
{
"_t" : "BObject",
"Number" : "123",
},
{
"_t" : "CObject",
"Testing" : "Pompeo"
}
]
}

去结构

type Data struct{
_id string
Structure []Object
}

type Object interface{
}

type AObject struct {
Text string
State string
}
type BObject struct {
Number string
}
type CObject struct {
Testing string
}

谢谢

最佳答案

您使用的是什么 mongo 驱动程序? “_t”是一个参数,用于在当前类型与标称类型不同时确定序列化的类型。它还用于正常的 JSON 序列化,因此您可以使用我能想到的三种方法之一。

  1. 使用支持它的不同 GO mongo 驱动程序。我建议使用 https://github.com/mongodb/mongo-go-driver这是官方的 MongoDB Go 驱动程序
  2. 自己写switch/case语句反序列化
type MongoObject struct {
// Contains all fields from all objects
_t string
Text string
State string
Number string
Testing string
}

func DeserializeObject(object MongoObject) Object{
switch t {
case "AObject":
return &AObject{Text: object.Text, State: object.State}
case "BObject":
return &BObject{Number: object.Text}
case "CObject":
return &CObject{Testing: object.Testing}
}
}
  1. 您可以从 mongo 获取 JSON 格式的数据,并使用特定的编码(marshal)处理为您完成

关于mongodb - 查询由 C# 驱动程序插入的带有 _t 定义的记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56054877/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com