【发布时间】:2020-10-19 16:39:49
【问题描述】:
我正在做一个网站项目,我想从 mongo 数据库中的用户名中获取会话。我写了一个函数,它接受会话 uuid 并输出会话名称。我得到了会话并且可以在命令行中打印一个 bson。我正在尝试从 bson 获取字符串和浮点值,或者至少从 mongo golang 中的 bson 获取 json 值。下面是我用golang和mongodb go driver写的代码:
package main
import (
"context"
"fmt"
"log"
"time"
"go.mongodb.org/mongo-driver/bson/primitive"
"go.mongodb.org/mongo-driver/mongo"
"go.mongodb.org/mongo-driver/mongo/options"
"golang.org/x/crypto/bcrypt"
"gopkg.in/mgo.v2/bson"
)
type user struct {
UserName string
Password []byte
First string
Last string
Role string
}
type session struct {
Id bson.ObjectId `bson:"_id,omitempty"`
Un string `json:"value"`
LastActivity time.Time `json:"value"`
UUID string `json:"value"`
}
func main() {
s := session{bson.NewObjectId(), "darkness", time.Now(), "1222"}
insertSession(s)
v := "1222"
getSession(v)
}
func getSession(UUID string) {
client, err := mongo.NewClient(options.Client().ApplyURI("mongodb+srv://lise:lise@cluster0.eouve.mongodb.net/userDatabase?retryWrites=true&w=majority"))
if err != nil {
log.Fatal(err)
}
ctx, _ := context.WithTimeout(context.Background(), 10*time.Second)
err = client.Connect(ctx)
if err != nil {
log.Fatal(err)
}
defer client.Disconnect(ctx)
sessionDatabase := client.Database("userDatabase")
sessionCollection := sessionDatabase.Collection("sessionCollection")
var sess []bson.M
filter, err := sessionCollection.Find(ctx, bson.M{"uuid": UUID})
if err != nil {
log.Fatal(err)
}
fmt.Println(sess)
//wantedSession := session{sessionMatched[0].un, sessionMatched[0].lastActivity, ,sessionMatched[0].uuid}
}
【问题讨论】:
-
Find返回一个游标。您必须从该光标中读取数据才能获取数据。 -
@Burak Serdar 我应该使用 cursor.next() 从光标读取还是其他什么? (谢谢你的回答顺便说一句非常有帮助:))
-
我了解如何获取游标,但我想将 bson 转换为字符串或 json 并获取会话的唯一用户名。我该如何实现它。谢谢你的回答顺便说一句