gpt4 book ai didi

mongodb - Mgo 插入命令不创建数据库或插入文档

转载 作者:数据小太阳 更新时间:2023-10-29 03:03:32 25 4
gpt4 key购买 nike

我的目标是实现这个 code .除了不使用 sql,我想使用 mongoDB。我认为我处理 session 的方式存在问题。

我正在尝试使用 mgo 通过 Rest API 将一些用户数据插入到 MongoDB 中。每当我打开 mongo shell 并运行 show dbs 命令时,都不会显示 poll DB。我正在使用 Postman 来测试 Rest API。任何想法我在插入过程中可能做错了什么?我尝试先在 mongo shell 中创建集合,然后运行 ​​CreateUser 函数,但我仍然没有看到创建了 poll DB。

用户

type User struct {
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
}

UserDAO

type UserDAO struct {
session *mgo.Session
}

创建 session

func GetMongoSession() *mgo.Session {
if mgoSession == nil {
var err error
mgoSession, err = mgo.Dial("localhost")
mgoSession.SetMode(mgo.Monotonic, true)

if err != nil {
log.Fatal("Failed to start the Mongo session.")
}
}
return mgoSession.Clone()
}

我将一个用户结构传递到我使用 Postman 创建的 CreateUser 函数中:

{
"username":"uname",
"password":"pass",
"email":"test@mail.com"
}

然后我只用相同的结构响应并接收此输出:

{
"id": "",
"username": "uname",
"password": "pass",
"email": "test@mail.com"
}

创建用户

func (dao *UserDAO) CreateUser(u *User) (*User, error) {
//return errors.New("Not implemented")

// Get "users" collection

dao.session = GetMongoSession()

c := dao.session.DB("poll").C("user")

defer dao.session.Close()

//u.Id = bson.NewObjectId()
err := c.Insert(u)

if err != nil {
return nil, err
}

return u, nil
}

HTTP 处理函数

func (h *Handler) CreateUserReq(w http.ResponseWriter, r *http.Request) {

// create new user using information from the Request object
var user User
decoder := json.NewDecoder(r.Body)

if err := decoder.Decode(&user); err != nil {
panic(err)
}

defer r.Body.Close()

// Create new User
u, err := h.UserService.CreateUser(&user)
if err != nil {
panic(err)
}
json.NewEncoder(w).Encode(*u)
}

显示数据库的输出

> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB

最佳答案

因为我没有您的应用程序的完整上下文,所以无法诊断您的代码到底有什么问题。但我想出了一个接近的例子,它按预期工作。

请看下面的代码。

package main

import (
"gopkg.in/mgo.v2"
"log"
"gopkg.in/mgo.v2/bson"
)

type User struct {
Id bson.ObjectId `json:"id" bson:"_id,omitempty"`
Username string `json:"username"`
Password string `json:"password"`
Email string `json:"email"`
}

func GetMongoSession() *mgo.Session {

mgoSession, err := mgo.Dial("localhost")
mgoSession.SetMode(mgo.Monotonic, true)

if err != nil {
log.Fatal("Failed to start the Mongo session.")
}

return mgoSession.Clone()
}

func CreateUser(u *User) (*User, error) {

session := GetMongoSession()

c := session.DB("poll").C("user")
defer session.Close()

err := c.Insert(u)

if err != nil {
return nil, err
}

return u, nil
}

func main() {

var user = User{
Email: "abc@somewhere.come",
Password: "My-secret",
Username: "YouGuess",
}

_, e := CreateUser(&user)
if e != nil {
panic(e)
}

log.Println("Done...")
}

一旦你执行它,你应该会在 MongoDB 中看到一个文档,前提是你使用正确的凭据成功建立了连接。

我可以在我的收藏中看到以下文档:

{
"_id": ObjectId("5a80941de0a0f75123aeb435"),
"username": "YouGuess",
"password": "My-secret",
"email": "abc@somewhere.come"
}

关于mongodb - Mgo 插入命令不创建数据库或插入文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48734250/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com