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

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

Mongo-go-driver GridFS 元數(shù)據(jù)

Mongo-go-driver GridFS 元數(shù)據(jù)

Go
慕絲7291255 2023-06-05 19:32:46
我為我工作的公司編寫了一個(gè)聊天應(yīng)用程序,并且我使用 mgo 驅(qū)動(dòng)程序有一段時(shí)間了?,F(xiàn)在我們將mgo重構(gòu)為官方的mongo驅(qū)動(dòng)。我已經(jīng)實(shí)現(xiàn)了 GridFS 來處理聊天文件,因?yàn)樗鼈儾⒉淮蟛⑶液?jiǎn)化了工作。以前的 mgo 驅(qū)動(dòng)程序在保存文件時(shí)有一個(gè)數(shù)據(jù)列表,其中一個(gè)字段是 contentType(對(duì)吧?)因此,在重構(gòu)此任務(wù)中包含的大部分服務(wù)后,我注意到新的官方 mongo 驅(qū)動(dòng)程序不執(zhí)行此操作??所以我決定嘗試手動(dòng)添加此字段,但后來我到了我不明白該怎么做的地步?嘗試過,options.GridFSUpload().SetMetadata(metadata)但我不明白它的邏輯,互聯(lián)網(wǎng)上關(guān)于在 GO 中工作的新 mongo 驅(qū)動(dòng)程序的結(jié)果真的很少。任何人都可以給我提示如何將自定義字段添加到文件文檔中?喜歡內(nèi)容類型??!真的很感激。這是我嘗試做的一個(gè)例子// GridFSInsert -func GridFSInsert(fileName string, data []byte, metadata ...bsonx.Elem) (primitive.ObjectID, error) {    checkMongoConnection(false)    var fileID primitive.ObjectID    bucket, bucketErr := gridFs.NewBucket(        Mongo.Client.Database(Mongo.DBName),        options.GridFSBucket().SetName(gridFSColName),    )    if bucketErr != nil {        return fileID, bucketErr    }    uploadStream, uploadStreamErr := bucket.OpenUploadStream(        fileName,        options.GridFSUpload().SetMetadata(metadata),    )    if uploadStreamErr != nil {        return fileID, uploadStreamErr    }    defer uploadStream.Close()    fileSize, writeErr := uploadStream.Write(data)    if writeErr != nil {        return fileID, writeErr    }    fileID = uploadStream.FileID    log.Printf("Write file to DB was succesful, File size: %d", fileSize)    return fileID, nil}對(duì)不起,如果我錯(cuò)過了什么,因?yàn)槲覜]有像我想的那樣有 GO 的經(jīng)驗(yàn)。謝謝你的幫助
查看完整描述

2 回答

?
qq_花開花謝_0

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

您沒有試圖理解的邏輯。在新的官方 mongo 驅(qū)動(dòng)程序中找不到太多關(guān)于 contentType 的原因是因?yàn)樵诰帉戲?qū)動(dòng)程序之前很久,contentType 在 gridfs 規(guī)范中就已被棄用。

我必須承認(rèn)gridfs 文檔沒有提到它。事實(shí)上,官方的 mongofiles cli 仍然使用傳統(tǒng)格式。

規(guī)范直截了當(dāng):

注意:一些舊版本的 GridFS 實(shí)現(xiàn)允許應(yīng)用程序在根級(jí)別向文件集合文檔添加任意字段。GridFS 的新實(shí)現(xiàn)將不允許這樣做,但必須準(zhǔn)備好處理可能具有附加字段的現(xiàn)有文件集合文檔。

如果你喜歡更詳細(xì)的官方推理:

為什么不推薦使用 contentType?

文件集合文檔中的大多數(shù)字段都由驅(qū)動(dòng)程序直接使用,但元數(shù)據(jù)、內(nèi)容類型和別名除外。所有純粹供應(yīng)用程序使用的信息都應(yīng)嵌入“元數(shù)據(jù)”文檔中。鼓勵(lì)希望存儲(chǔ) contentType 以在其應(yīng)用程序中使用的 GridFS 用戶將“contentType”字段添加到“元數(shù)據(jù)”文檔,而不是使用已棄用的頂級(jí)“contentType”字段。

這有點(diǎn)道理。contentType驅(qū)動(dòng)程序從字面上遵循規(guī)范的措辭——除了在 中,無法在任何地方創(chuàng)建屬性metadata,但 Bucket.Find 仍將返回contentType由“舊版本”創(chuàng)建的文件。

從遺留 gridfs 到新格式的一次性轉(zhuǎn)換可以很簡(jiǎn)單:

db.getCollection("fs.files").aggregate([

? ? {$addFields: {?

? ? ? ? "length" : {$toLong: "$length"},

? ? ? ? "metadata.contentType": { $ifNull: [ "$contentType", "$metadata.contentType" ] }?

? ? }},

? ? { $out : "fs.files" }

])

假設(shè)您的存儲(chǔ)桶默認(rèn)為“fs”并且您不會(huì)以舊格式上傳文件。如果您有足夠的可用空間,那么創(chuàng)建新的臨時(shí)集合、驗(yàn)證它然后重命名并不是一個(gè)糟糕的主意out。


如果出于任何原因必須支持舊版格式,您仍然可以直接訪問 gridfs 集合:


// in your code snippet after

fileID = uploadStream.FileID


// update the document that represent uploaded file

files := db.Collection("fs.files")

updateResult, err := files.UpdateOne(

? ? context.Background(),

? ? bson.D{{"_id", fileID}},

? ? bson.D{{"$set", bson.D{{"contentType", contentType}}}},

)

其中“fs”是您的存儲(chǔ)桶名稱,contentType是您要設(shè)置為 contentType 的字符串值。


請(qǐng)記住,“一些舊版本”使用 int32 作為文件長(zhǎng)度。新驅(qū)動(dòng)程序期望它是 int64。對(duì)于單獨(dú)使用 *.fiiles 集合的類似查找的操作應(yīng)該沒問題,但可能會(huì)導(dǎo)致使用新的官方驅(qū)動(dòng)程序下載此類文件時(shí)出現(xiàn)問題。


查看完整回答
反對(duì) 回復(fù) 2023-06-05
?
茅侃侃

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

這是一個(gè)例子SetMetadata()。


opts := options.GridFSUpload()

opts.SetMetadata(bsonx.Doc{{Key: "content-type", Value: bsonx.String("application/json")}})

if ustream, err = bucket.OpenUploadStream("test.txt", opts); err != nil {

? ? t.Fatal(err)

}

查看完整回答
反對(duì) 回復(fù) 2023-06-05
  • 2 回答
  • 0 關(guān)注
  • 195 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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