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

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

在 Go 中使用 MongoDb 默認(rèn)驅(qū)動(dòng)程序創(chuàng)建唯一索引

在 Go 中使用 MongoDb 默認(rèn)驅(qū)動(dòng)程序創(chuàng)建唯一索引

Go
UYOU 2022-05-18 16:02:46
我在使用Go 的官方 MongoDB 驅(qū)動(dòng)程序?yàn)槲业囊恍?shù)據(jù)創(chuàng)建唯一索引時(shí)遇到了一些問題。所以我有一個(gè)這樣的結(jié)構(gòu):type Product struct {    ID        primitive.ObjectID `json:"_id" bson:"_id"`    Name      string             `json:"name" bson:"name"`    Price     float64            `json:"price" bson:"price"`    Attribute []Attribute        `json:"attribute" bson:"attribute"`    Category  string             `json:"category" bson:"category"`}然后我想為該name屬性創(chuàng)建一個(gè)唯一索引。我試圖在我的功能中做這樣的事情Create(對(duì)于產(chǎn)品)func Create(c echo.Context) error {    //unique index here     indexModel, err := productCollection.Indexes().CreateOne(context.Background(),        IndexModel{            Keys:    bsonx.Doc{{"name", bsonx.Int32(1)}},            Options: options.Index().SetUnique(true),        })    if err != nil {        log.Fatalf("something went wrong: %+v", err)    }    //create the product here    p := new(Product)    if err := c.Bind(p); err != nil {        log.Fatalf("Could not bind request to struct: %+v", err)        return util.SendError(c, "500", "something went wrong", "failed")    }    ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)    defer cancel()    result, _ := productCollection.InsertOne(ctx, p)    return util.SendSuccess(c, result.InsertedID)}問題是在創(chuàng)建產(chǎn)品之前,我并不完全知道如何indexModel在上下文中作為選項(xiàng)傳遞。另外,我不確定我正在做什么,我只創(chuàng)建一次索引(這是我想要做的)。如果我能指出如何做到這一點(diǎn)的正確方向,我將不勝感激。我正在使用 Go 的 echo 框架,以防萬一這提供了更多上下文。
查看完整描述

2 回答

?
繁星淼淼

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

每次Create調(diào)用函數(shù)時(shí),您的代碼都會(huì)嘗試創(chuàng)建索引,這會(huì)起作用,但效率不高,因?yàn)樗饕恍枰獎(jiǎng)?chuàng)建一次(或者如果它不存在)。我建議讓創(chuàng)建索引成為建立與數(shù)據(jù)庫連接的函數(shù)的責(zé)任,或者在初始化數(shù)據(jù)庫連接后立即運(yùn)行的函數(shù),這樣它只運(yùn)行一次(當(dāng)你的程序啟動(dòng)時(shí))。

由于該collection.Indexes().CreateOne(...)方法在嘗試創(chuàng)建已存在的索引時(shí)不會(huì)返回錯(cuò)誤,因此您可以使用此方法來確保索引存在,類似于非官方 MongoDB 驅(qū)動(dòng)程序的EnsureIndex功能。

或者,您可以執(zhí)行 Cahaba Data 在他的回答中建議的操作,即使索引創(chuàng)建成為一次性的數(shù)據(jù)庫管理任務(wù),而不是您的應(yīng)用程序的責(zé)任。我之前曾與一些同事就此進(jìn)行過討論,雖然我確實(shí)同意它在技術(shù)上是一次性的數(shù)據(jù)庫管理任務(wù),但我仍然更喜歡讓我的應(yīng)用程序在啟動(dòng)時(shí)確保它需要的索引確實(shí)存在,創(chuàng)建如果不是的話。畢竟,如果有人忘記或創(chuàng)建錯(cuò)誤的索引,我的應(yīng)用程序可能會(huì)出現(xiàn)故障/癱瘓。它還提供了有關(guān)您的應(yīng)用程序需要/使用哪些索引的良好文檔,而不必與數(shù)據(jù)庫管理員進(jìn)行溝通并希望他/她/它會(huì)適當(dāng)?shù)刈⒁馑?。?dāng)然,請(qǐng)隨意形成您自己的意見:)


查看完整回答
反對(duì) 回復(fù) 2022-05-18
?
弒天下

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

是的,我認(rèn)為創(chuàng)建索引是 1 次 DBA/Admin 事件。這不是應(yīng)用程序/代碼任務(wù)。以適當(dāng)?shù)臋?quán)限登錄 mongo,創(chuàng)建索引,注銷....就是這樣。除了創(chuàng)建索引的 mongo shell 命令之外沒有其他代碼。



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

添加回答

舉報(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)