我正在尝试使用 Go 插入 MongoDB,其中一个字段将具有动态数据。就我而言,它将通过 gRPC 来自其他服务,但我将示例简化为:
package main
import (
"context"
"fmt"
_struct "github.com/golang/protobuf/ptypes/struct"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"log"
)
type siteItem struct {
ID primitive.ObjectID `bson:"_id,omitempty"`
Name string `bson:"name"`
// Data string `bson:"data"`
Data *_struct.Value `bson:"data"`
}
func main() {
client, _ := mongo.NewClient(options.Client().ApplyURI("mongodb://localhost:27017"))
client.Connect(context.TODO())
collection := client.Database("site").Collection("sites")
data := siteItem{
Name: "Test name",
// Data: "Test data",
Data: &_struct.Value{
Kind: &_struct.Value_StringValue{
StringValue: "String from struct",
},
},
}
res, err := collection.InsertOne(context.Background(), data)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
我得到一个错误:cannot transform type main.siteItem to a BSON Document: no encoder found for structpb.isValue_Kind
如果我使用string
而不是*_struct.Value
- 它工作得很好。但在我的情况下Data:
,可能有来自 JSON 的任何价值。