第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用 golang 檢索 mongodb 中的嵌套對(duì)象數(shù)組?

如何使用 golang 檢索 mongodb 中的嵌套對(duì)象數(shù)組?

Go
人到中年有點(diǎn)甜 2023-01-03 16:19:04
我正在使用 Golang/Fiber + Mongo 驅(qū)動(dòng)程序。我有一個(gè)簡(jiǎn)單的博客文章結(jié)構(gòu):type Post struct {    ID          primitive.ObjectID `json:"_id" bson:"_id,omitempty"`    Title       *string            `json:"title" bson:"title"`    Slug        *string            `json:"slug" bson:"slug"`    Content     []interface{}      `json:"content" bson:"content,omitempty"` // same as any[]    CreatedAt   time.Time          `json:"created_at" bson:"created_at"`    UpdatedAt   time.Time          `json:"updated_at" bson:"updated_at"`    PublishedAt *time.Time         `json:"published_at" bson:"published_at"`}在內(nèi)容中,我放置了對(duì)象數(shù)組:[    {        data: 'blah blah'    },    {        data: 'blah blah'    }]方法本身非常簡(jiǎn)單:func GetPostBySlug(slug string) (Post, error) {    post := Post{}    filter := bson.M{        "slug": slug,    }    database, error := Database.GetMongoDatabase()    if error != nil {        println(error)    }    collection := database.Collection(model_name)    err := collection.FindOne(ctx, filter).Decode(&post)    if err != nil {        return post, err    }    return post, nil}這就是我得到的:"_id": "000000000000000000000000","title": "Test","slug": "test","content": [ // array of arrays? what??    [        {            "Key": "data",            "Value": "blah blah"        },        {            "Key": "data",            "Value": "blah blah"        },    ]],"created_at": "2022-06-07T21:08:04.261Z","updated_at": "2022-07-20T21:42:36.717Z","published_at": null在 mongodb 中,內(nèi)容字段完全按照我傳遞的方式保存,但是當(dāng)我嘗試獲取文檔時(shí),內(nèi)容會(huì)轉(zhuǎn)換為這個(gè)帶有鍵值對(duì)的奇怪?jǐn)?shù)組。如果我保存如下內(nèi)容:content: [    {        data: {            test: 'test',            what: 'what'        }    }]它將轉(zhuǎn)換為:content: [    [        Key: "data",        Value: [            {                Key: "test",                Value: "test"             },            {                Key: "what",                Value: "what"             },        ]    ]]我理解這背后的原因(這只是 golang 處理 JSON 的方式?)并假設(shè)中間某處應(yīng)該有一個(gè)額外的步驟,但我不知道我到底需要做什么
查看完整描述

3 回答

?
慕蓋茨4494581

TA貢獻(xiàn)1850條經(jīng)驗(yàn) 獲得超11個(gè)贊

修改類(lèi)型Contentinterface{}或只是string。



查看完整回答
反對(duì) 回復(fù) 2023-01-03
?
qq_花開(kāi)花謝_0

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊

您看到的原因是因?yàn)槟褂胕nterface{}的元素類(lèi)型為Content:


Content []interface{}

如果使用interface{},它基本上不攜帶類(lèi)型信息,驅(qū)動(dòng)程序在對(duì)數(shù)組元素進(jìn)行 umarshaling 時(shí)應(yīng)該使用什么類(lèi)型,因此驅(qū)動(dòng)程序?qū)⑦x擇/使用bson.D來(lái)表示content字段的文檔。bson.D是一個(gè)切片,其中包含文檔的有序字段列表,這就是為什么您會(huì)看到“數(shù)組的數(shù)組”。每個(gè)bson.D都是一個(gè)切片,代表一個(gè)文檔。


type D []E


type E struct {

    Key   string

    Value interface{}

}

如果您可以使用結(jié)構(gòu)對(duì)數(shù)組元素建模,請(qǐng)使用它,例如:


type Foo struct {

    Bar string

    Baz int

}


Content []Foo `json:"content" bson:"content,omitempty"`

// Or a pointer to Foo:

Content []*Foo `json:"content" bson:"content,omitempty"`

如果您沒(méi)有數(shù)組元素的固定模型,或者您可以使用bson.Mwhich is a map(但是字段/屬性將是無(wú)序的,這可能是也可能不是問(wèn)題):


type M map[string]interface{}

使用它:


Content []bson.M `json:"content" bson:"content,omitempty"`


查看完整回答
反對(duì) 回復(fù) 2023-01-03
?
蝴蝶不菲

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊

只有 []bson.M 如果它是一個(gè)數(shù)組...我不得不使用 bson.M 而不是因?yàn)槲业臄?shù)據(jù)結(jié)構(gòu)。



查看完整回答
反對(duì) 回復(fù) 2023-01-03
  • 3 回答
  • 0 關(guān)注
  • 172 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)