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

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

如何使用 mgo(golang 客戶端)查詢 mongodb 中的 UUID 字段?

如何使用 mgo(golang 客戶端)查詢 mongodb 中的 UUID 字段?

Go
倚天杖 2023-03-29 17:05:20
我在查詢我的 mongo 集合中提交的 UUID 時(shí)遇到問(wèn)題。Mongo文檔結(jié)構(gòu)如下:{    "_id": {        "$oid": "5acf7faff5f02b0001e9fda1"    },    "j": {        "$uuid": "d0459793-3ec0-71fd-319e-b959af081db6"    },    "s": "ok",    "creation_date": {        "$date": "2018-04-12T15:47:59.003Z"    }}我想獲取文檔,傳遞juuid(不是 ObjectID)。我創(chuàng)建了 mongo 連接,并獲取了我的集合,然后我嘗試執(zhí)行此查詢:import (           mgo "gopkg.in/mgo.v2"       "gopkg.in/mgo.v2/bson")...var job *Jobuid, _ := uuid.FromString(m.ID)e := c.Find(bson.M{"j": uid.String()}).One(&job)但e始終等于“未找到”。m.ID是沒(méi)有破折號(hào)的 uuid 字符串-,所以我將它轉(zhuǎn)換為uuid.UUID.其他查詢c.Find(bson.M{"s": "ok"}).All(&jobs)工作正常,所以我確定連接和收集。使用 golang 1.11 和 mongodb 3.6。更新:當(dāng)我db.mycol.find()從 mongo 控制臺(tái)執(zhí)行時(shí),結(jié)果是一個(gè)文檔列表,例如:{ "_id" : ObjectId("5acf5b0ac7fb0700010040ac"), "j" : BinData(3,"amOjUW1oQQ6dNsvLrQuDhg=="), "s" : "ok", "creation_date" : ISODate("2018-04-12T13:11:38.365Z") }所以我試著像這樣修改我的查詢:e := c.Find(bson.M{"j": bson.Binary{0x03, []byte(m.ID)}}).One(&job)而且它仍然不返回文件。
查看完整描述

3 回答

?
瀟瀟雨雨

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

MongoDB 文檔中的屬性j是類型BinData3,因此在將它與字符串匹配時(shí)使用過(guò)濾器永遠(yuǎn)不會(huì)產(chǎn)生任何結(jié)果。


你的第二次嘗試是在正確的軌道上。除了您要過(guò)濾 UUID 字符串的十六進(jìn)制表示的 UTF-8 字節(jié)序列(這是 Go 在內(nèi)存中存儲(chǔ)字符串的方式,這是 -> 轉(zhuǎn)換產(chǎn)生的結(jié)果string)[]byte。這將永遠(yuǎn)不會(huì)產(chǎn)生任何結(jié)果。


原因是您必須提供的二進(jìn)制數(shù)據(jù)bson.Binary不是上述值,而是 UUID 的原始字節(jié)。


因此,您要做的是對(duì) UUID(以十六進(jìn)制表示形式提供給您)進(jìn)行十六進(jìn)制解碼,并使用此二進(jìn)制數(shù)據(jù)。


data, err := hex.DecodeString(m.ID)

if err != nil {

? ? panic(err)

}


e := c.Find(bson.M{"j": bson.Binary{

? ? Kind: bson.BinaryUUIDOld,

? ? Data: data,

}}).One(&job)

請(qǐng)注意,您必須將 UUID 傳遞給hex.DecodeString()不帶破折號(hào)的,因此您甚至不需要任何第三方庫(kù)來(lái)處理您擁有的 UUID 字符串。

另請(qǐng)注意,gopkg.in/mgo.v2不再維護(hù)。而是使用社區(qū)支持的 fork:?github.com/globalsign/mgo。


查看完整回答
反對(duì) 回復(fù) 2023-03-29
?
達(dá)令說(shuō)

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

如果您有要查詢的 GUID,則轉(zhuǎn)換對(duì)我有用(重新排序密鑰字節(jié),然后轉(zhuǎn)換為十六進(jìn)制解碼):


func CsuuidToBinary(key string) []byte {

    hexStr := strings.Replace(key, "-", "", -1)

    first := hexStr[6:8] + hexStr[4:6] + hexStr[2:4] + hexStr[0:2]

    second := hexStr[10:12] + hexStr[8:10]

    third := hexStr[14:16] + hexStr[12:14]

    fourth := hexStr[16:len(hexStr)]

    hexStr = first + second + third + fourth


    data, _ := hex.DecodeString(hexStr)

    return data

}

進(jìn)而:


    data := CsuuidToBinary(guidKey)


    var a A

    err := collection.Find(bson.M{"SomeKey": bson.Binary{Kind: 0x03, Data: data,}}).One(&a)



查看完整回答
反對(duì) 回復(fù) 2023-03-29
?
慕尼黑的夜晚無(wú)繁華

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

這是因?yàn)?UUID 存儲(chǔ)為二進(jìn)制數(shù)據(jù),您需要將其轉(zhuǎn)換為字符串才能查詢它


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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