Пример чтения / записи mgo mongodb - PullRequest
0 голосов
/ 19 мая 2018

Я новичок в mgo, и мне понадобится некоторая помощь в этом: я могу успешно подключиться и распечатать имя БД, название коллекции и номер элемента коллекции, но не знаю, как распечатать содержимое и написать обратно.Что было бы эквивалентно в mgo приведенным ниже командам оболочки mongodb?

- db.coll.find()
- document=({"user_id" : "xxx","password" :"xxx"....});
- db.coll.insert(document)

//////////////////////////////////////////////////////////////////////////

package main

import (
    "fmt"
    "time"

    "gopkg.in/mgo.v2"
)

//const MongoDb details
const (
    hosts      = "mongodb.xxx:27017"
    database   = "myinfo"
    username   = "xxxxx"
    password   = "start123"
    collection = "userdetails"
)

func main() {

    info := &mgo.DialInfo{
        Addrs:    []string{hosts},
        Timeout:  60 * time.Second,
        Database: database,
        Username: username,
        Password: password,
    }

    session, err1 := mgo.DialWithInfo(info)
    if err1 != nil {
        panic(err1)
    }

    col := session.DB(database).C(collection)
    datab := session.DB(database)

    count, err2 := col.Count()
    if err2 != nil {
        panic(err2)
    }

    fmt.Println("Database Name:", datab.Name)
    fmt.Println("Collection FullName:", col.FullName)
    fmt.Println(fmt.Sprintf("Documents count: %d", count))

}

Вот версия, которая работает:

    package main

import (
    "fmt"
    "time"
    "gopkg.in/mgo.v2"
    "gopkg.in/mgo.v2/bson"
)

//const MongoDb details
const (
    hosts      = "xxx:27017"
    database   = "myinfo"
    username   = "xxxx"
    password   = "start123"
    collection = "userdetails2"
)


type UserDetails struct {
        _id        bson.ObjectId `bson:"_id,omitempty"`
        name    string
        phone   string
}

func main() {

    info := &mgo.DialInfo{
        Addrs:    []string{hosts},
        Timeout:  60 * time.Second,
        Database: database,
        Username: username,
        Password: password,
    }

    session, err1 := mgo.DialWithInfo(info)
    if err1 != nil {
        panic(err1)
    }

    col := session.DB(database).C(collection)
    datab := session.DB(database)

    count, err2 := col.Count()
    if err2 != nil {
        panic(err2)
    }


        fmt.Println("Database Name:", datab.Name)
        fmt.Println("Collection FullName:", col.FullName)
        fmt.Println(fmt.Sprintf("Documents count: %d", count))

        var userDetail []bson.M
        _ = col.Find(nil).All(&userDetail)
        for _, v := range userDetail {
        fmt.Println(v)
}

}

Ответы [ 2 ]

0 голосов
/ 21 мая 2018

Вот довольно простой пример пакета mgo: https://gist.github.com/border/3489566

Я бы предложил ознакомиться с официальной документацией для получения подробной информации и ссылок.https://godoc.org/github.com/globalsign/mgo#Collection.Find

Обратите внимание, что пакет "gopkg.in/mgo.v2/bson" больше не поддерживается.https://github.com/globalsign/mgo является ответвлением этого пакета и поддерживается сообществом.

0 голосов
/ 19 мая 2018

Попробуйте:

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

type UserDetails struct {
    Id bson.ObjectId `bson:"_id,omitempty"`
    UserId string `bson:"user_id"`
    Password string `bson:"password"`
}
userDetails := []UserDetails{}
query := bson.M{
    "user_id": "xxx",
    "password" :"xxx"
}
err := col.Find(query).All(&userDetails)
if err != nil {
    return
}
for _, userDetail := range userDetails {
    fmt.Println(userDetail)
}

Я не проверял этот код.Это просто пример.

...