猿问

在 Go api 中过滤从 MongoDB 显示的信息

我是 Go 和 React 的新手,我在这个迷你项目中使用了这两者。Go 正在使用 Mongodb 运行后端 api。


我在 Go 中从 Mongo 获取用户列表,然后将其发送到 React,问题是 Mongo 给了我用户的所有字段(_id、密码和用户名),我只想要用户名。我不明白如何过滤它并防止所有字段从 Go 发送到 React。


Go API 的 JSON 输出:


{

    "Success": true,

    "Data": [

        {

            "_id": "6205ac3d72c15c920a424608",

            "password": {

                "Subtype": 0,

                "Data": "removed for security"

            },

            "username": "removed for security"

        },

        {

            "_id": "6206b44afb8b044fdba76b8f",

            "password": {

                "Subtype": 0,

                "Data": "removed for security"

            },

            "username": "removed for security"

        }

    ]

}

这是我指定路线的 Go 代码:


// Route: Get Users, for getting a list of users

func RouteGetUsers(w http.ResponseWriter, r *http.Request, p httprouter.Params) {

    // Set content-type to JSON

    w.Header().Set("Content-Type", "application/json")


    type Response struct {

        Success bool     `json:"Success"`

        Data    []bson.M `json:"Data"`

    }


    // Load the env file

    err := godotenv.Load("variables.env")

    if err != nil {

        log.Fatal("Error loading .env file")

    }


    // Get Mongo DB environment variable

    uri := os.Getenv("MONGO_URI")

    if uri == "" {

        log.Fatal("You must set your 'MONGO_URI' environmental variable. See\n\t https://docs.mongodb.com/drivers/go/current/usage-examples/#environment-variable")

    }


    // Connect to Mongo Database

    client, err := mongo.Connect(context.TODO(), options.Client().ApplyURI(uri))

    if err != nil {

        panic(err)

    }


    // Close the database connection at the end of the function

    defer func() {

        if err := client.Disconnect(context.TODO()); err != nil {

            panic(err)

        }

    }()


}


千万里不及你
浏览 94回答 1
1回答

蛊毒传说

使用投影选项:opts := options.Find().SetProjection(bson.D{{"username", 1}})cursor, err := coll.Find(context.TODO(), bson.D{}, opts)作为第二种方法:使用您想要的字段声明一个类型,并获取该类型。type Data struct {   Username string `bson:"username" json:"username"`}...var data []Dataif err = cursor.All(context.TODO(), &data); err != nil { ......var response = struct {    Success bool     `json:"Success"`    Data    []Data   `json:"Data"`}{    true,    data,}responseJson, err := json.Marshal(response)...第三种方法:过滤问题中的地图:for _, result := range results {    for k := range result {       if k != "username" {          delete(result, k)       }    }}
随时随地看视频慕课网APP

相关分类

Go
我要回答