亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

mgo.v2 Find().Select().One() 返回空白

mgo.v2 Find().Select().One() 返回空白

Go
胡子哥哥 2022-01-10 15:06:37
mongo shell 輸出> db.departments.find(){ "_id" : ObjectId("5733b051e444917f9d273ce6"), "id" : "5733b05157659a11a4589102", "brandid" : "1", "name" : "first", "managerid" : "0", "users" : [ "1", "2", "3", "7" ] }該函數將 depID 作為輸入,我驗證了它應該是什么,即 5733b05157659a11a4589102func GetUsers(depID string) (*department.UsersResp, error) {    if !bson.IsObjectIdHex(depID) {        return nil, fmt.Errorf("%s is not a ObjectId value", depID)    }    type UserResp struct {        users []string     }    var result *UserResp    err := coll.Find(bson.M{"id": depID}).Select(bson.M{"users": 1}).One(&result)    if err != nil {    fmt.Println(err, result)        return nil, err    }    fmt.Println("result:",result)    //ignore return type and value the above print is what i have doubt about    return result, nil}結果的輸出來了 {[]}我嘗試了以下查詢,其他err := coll.Find(bson.M{"id": depID})One(&result)err := coll.Find(nil).One(&result)結果相同。數據庫連接和其他事情都很好,因為使用相同變量的同一文件的所有其他功能都coll有效更多信息 我也試過這個type UserResp struct {   users []string `json:"users" bson:"users"`}蒙哥日志MGO: cluster.go:590: Cluster has 1 known masters and 0 known slaves.MGO: socket.go:391: Socket 0xc8201340e0 to 127.0.0.1:27017: serializing op: &mgo.queryOp{collection:"departments.departments", query:bson.M{"id":"5733b05157659a11a4589102"}, skip:0, limit:-1, selector:bson.M{"users":1}, flags:0x4, replyFunc:(mgo.replyFunc)(0x58eef0), mode:1, options:mgo.queryWrapper{Query:interface {}(nil), OrderBy:interface {}(nil), Hint:interface {}(nil), Explain:false, Snapshot:false, ReadPreference:bson.D(nil), 
查看完整描述

3 回答

?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

我認為問題可能是您的 UserResp 結構具有私有成員。


//Instead of

 users []string `json:"users" bson:"users"`


// Try

 Users []string `json:"users" bson:"users"`


查看完整回答
反對 回復 2022-01-10
?
BIG陽

TA貢獻1859條經驗 獲得超6個贊

一個瘋狂的猜測,但也許可以嘗試

var result UserResp

而不是使用指針。

同樣正如沃爾特所提到的,您也應該導出該Users字段。


查看完整回答
反對 回復 2022-01-10
?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

  1. users沒有出口,應該是Users。

  2. 您不需要指向指針的指針,我個人只是使用var result UserResp.

以下更正:

type UserResp struct {

    Users []string 

}

var result UserResp

err := coll.Find(bson.M{"id": depID}).Select(bson.M{"users": 1}).One(&result)

如果這些不是問題,那么我在處理 BSON 和數組/切片時遇到了很多問題。您可以嘗試制作Users一個界面,或者將整個輸出寫入 bson.M 映射 ( map[string]interface{}) 并從那里開始。我會這樣做:


var result bson.M

err := coll.Find(bson.M{"id": depID}).Select(bson.M{"users": 1}).One(&result)

您可以使用類型斷言訪問基礎數據:


result["users"].([]string)

如果這不起作用,只需檢查底層數據以調試返回的類型:


fmt.Printf("%+v", result)

無論哪種方式,一旦你像這樣在 Go 中擁有數據。調試起來會容易得多。


查看完整回答
反對 回復 2022-01-10
  • 3 回答
  • 0 關注
  • 263 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號