在Golang中從mongo中解讀資料時遇到困難,可能是因為我是新手。剛開始學習Golang和MongoDB
。嘗試使用map[string]interface{}來避免任何與結構相關的錯誤
var data map[string]interface{}。
filter := bson.M{"profile.username": username} 。
singleResult := u.getCollection(client).FindOne(u.ctx, filter)。
err := singleResult.Decode(data)
這樣就不能解開了,錯誤是不能解碼為空值
。也試了一下確切的結構。
var result *models.UserData
filter := bson.M{"profile.username": username}。
singleResult := u.getCollection(client).FindOne(u.ctx, filter)。
err := singleResult.Decode(result)
失敗了,同樣的錯誤不能解碼為零值
。試圖用map[string]interface{}找到所有的東西
。var result []/span>models.UserData
cursor, _ := u.getCollection(client).Find(u.ctx, bson.M{})
err := cursor.All(u.ctx, & result)
像預期的那樣完美地作業
試圖用精確的結構找到所有的東西var data []map[string]interface{}。
cursor, _ := u.getCollection(client).Find(u.ctx, bson.M{})。
err := cursor.All(u.ctx, & result)
完美地實作了預期的效果
現在我想,可能是我沒有在mongo中找到資料,但后來我想,可能是我沒有在mongo中找到資料。
filter := bson.M{"profile.username": username}。
singleResult := u.getCollection(client).FindOne(u.ctx, filter)。
raw, _ := singleResult.DecodeBytes()
log.Print("
"/span> raw.String() "
")
這就按預期列印出了資料。雖然我注意到一件事,所有非字串的值都被格式化為{"$numberLong": "1"}。我還是不知道這是否正確,還是問題的原因。
uj5u.com熱心網友回復:
在你前兩個失敗的例子中,傳遞給Decode()的資料都是nil:
// data == nil.
var data map[string]interface{}。
//...。
// result == nil
var result *models.UserData
嘗試像
var result = & models.UserData{}。//init the pointer with a block of valid allocated memory。
// ...
err := singleResult.Decode(result)
uj5u.com熱心網友回復:
為了讓Decode()將檔案寫入傳遞的值中,它必須是一個(非nil)指標。傳遞任何值都會創建一個副本,如果你傳遞一個非指標,只有副本可以被修改。如果你傳遞一個指標,仍然會產生一個拷貝,但是Decode()將修改指向的值,而不是指標。
在你前兩個失敗的例子中,你傳遞了一個非指標(或者一個nil指標):
err := singleResult.Decode(result)
修改它以傳遞一個(非nil)指標:
err := singleResult.Decode(&result)
你的最后2個例子是可行的,因為你已經在傳遞(非nil)指標:
err := cursor.All(u.ctx, &result)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/329365.html
標籤:
