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

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

從 Go Mongo API 返回單個對象

從 Go Mongo API 返回單個對象

Go
撒科打諢 2022-11-23 13:59:38
我一直遇到的麻煩是,只有當令牌不在數組中時,下面的代碼才有效(或者被認為是原始刷新令牌,其余的則從中派生)。我浪費了太多寶貴的精力試圖找到一種方法來返回正確的會話。// Find the current sessions infocurrentSession := model.Session{}lookupSession := bson.D{{Key: "token", Value: refreshToken}}_ := tokensCol.FindOne(ctx, lookupSession).Decode(&currentSession)token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDcyMzAxNTJ9.R-Tm8sgs..."userID: "1"userAgent: ""ip: ""exp: 1647230152valid: falseoriginal: truefamily:   0:      token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDcyMzAyNTJ9.noqkeUYW..."      userID: "1"      userAgent: ""      ip: ""      exp: 1647230252      valid: true      original: false是否有一個一站式商店可以返回令牌駐留在文檔頂層或嵌套在family數組中的對象?下面的代碼部分有效,但返回以原始標記開頭的整個文檔。不確定如何調整檢索到的數據currentSession := model.Session{}filter := bson.M{    "family": bson.M{        "$elemMatch": bson.M{"token": refreshToken},    },}_ = tokensCol.FindOne(ctx, filter).Decode(&currentSession)fmt.Println(currentSession)退貨:{c8ncjdiaas68dh9fq1d0 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDcyMzcwNjJ9.KlR1mdC0UBnGfxr31MZwzoE7tTVQwuN5uciteSqh8Kg 1 1647237062 false true [{c8ncjhaaas68dh9fq1dg eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDcyMzcwNzd9.lx6MIBN_pzlKei9DWr0-k-kvr6yLJ4XfhGSTNNVqRKY 1 1647237077 true false []}]}編輯:很好,但是......我仍然只返回文檔頂部的原始標記,而不是我需要的嵌套對象?唯一的區別是令牌的值正確返回而不是 throwing "token": 1,我說"token": refreshTokensession := model.Session{}lookupSession := bson.M{    "$or": []bson.M{        {"token": refreshToken},        {"family.token": refreshToken},    },}opts := options.FindOne().SetProjection(    bson.M{        "token":     refreshToken,        "userid":    1,        "useragent": 1,        "ip":        1,        "exp":       1,        "valid":     1,        "original":  1,    },)lookupErr := tokensCol.FindOne(ctx, lookupSession, opts).Decode(&session)我真的需要從返回的文檔FindOne中包含來自對象的特定數據,而不是文檔的頂層。因為我不會對此進行檢查,因為它是無效的。對此有任何意見或建議嗎?
查看完整描述

1 回答

?
牛魔王的故事

TA貢獻1830條經驗 獲得超3個贊

所以基本上你想找到一個文檔,它有一個token字段或family數組中的一個元素有token一個給定值的字段?這只是一個$or條件,因此請使用此lookupSession過濾器文檔:


lookupSession := bson.M{

    "$or": []bson.M{

        {"token": refreshToken},

        {"family.token": refreshToken},

    },

}

如果您不想檢索完整的結果文檔,請使用投影。有關示例,請參閱如何使用官方 mongo-go-driver 從 mongo 文檔中過濾字段


查看完整回答
反對 回復 2022-11-23
  • 1 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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