我遇到的麻煩是,下面的代碼僅在令牌不在陣列中時才有效,(或者被認為是其余的原始重繪 令牌)。我浪費了太多寶貴的精力試圖找到一種方法來回傳正確的會話。
// Find the current sessions info
currentSession := model.Session{}
lookupSession := bson.D{{Key: "token", Value: refreshToken}}
_ := tokensCol.FindOne(ctx, lookupSession).Decode(¤tSession)
token: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDcyMzAxNTJ9.R-Tm8sgs..."
userID: "1"
userAgent: ""
ip: ""
exp: 1647230152
valid: false
original: true
family:
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(¤tSession)
fmt.Println(currentSession)
回報:
{c8ncjdiaas68dh9fq1d0 eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDcyMzcwNjJ9.KlR1mdC0UBnGfxr31MZwzoE7tTVQwuN5uciteSqh8Kg 1 1647237062 false true [{c8ncjhaaas68dh9fq1dg eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJleHAiOjE2NDcyMzcwNzd9.lx6MIBN_pzlKei9DWr0-k-kvr6yLJ4XfhGSTNNVqRKY 1 1647237077 true false []}]}
我已經嘗試了很多,我不會費心添加到這個問題集群中,我提前道歉,但真的需要更好的一瞥嗎?
uj5u.com熱心網友回復:
所以基本上你想找到一個檔案,它有一個token欄位或family陣列中的一個元素,它有token一個給定值的欄位?這只是一個$or條件,所以使用這個lookupSession過濾器檔案:
lookupSession := bson.M{
"$or": []bson.M{
{"token": refreshToken},
{"family.token": refreshToken},
},
}
如果您不想檢索完整的結果檔案,請使用投影。例如,請參閱如何使用官方 mongo-go-driver 從 mongo 檔案中過濾欄位
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/444032.html
標籤:mongodb 走 mongodb查询 mongo-go
