dsm1998
dsm1998
2015-01-18 06:35

使用Go插入和查询MongoDB数据

已采纳
package main

import (
    "fmt"
    "log"

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

type Customer struct {
    Id              bson.ObjectId `bson:"_id,omitempty"`
    id              int           `bson:"id,"`
    firstName       string        `bson:"firstName"`
    surname         string        `bson:"surname"`
    gender          string        `bson:"gender"`
    address1        string        `bson:"address1"`
    address2        string        `bson:"address2"`
    city            string        `bson:"city"`
    state_region    string        `bson:"state_region"`
    county_province string        `bson:"county_province"`
    postalCode      string        `bson:"postalCode"`
    country         string        `bson:"country"`
    acct_bal        float64       `bson:"acct_bal"`
    status          string        `bson:"status"`
}

func main() {
    uri := "localhost:27017"

    // connect to mongodb
    session, err := mgo.Dial(uri)
    if err != nil {
        log.Fatal("Couldn't connect to db.", err)

    }
    defer session.Close()

    // collection
    c := session.DB("mydb").C("customers")

    // query one
    result := Customer{}
    err = c.Find(bson.M{"status": "B"}).One(&result)
    if err != nil {
        log.Fatal("Couldn't find him.", err)

    }
    fmt.Println("One Result: ", result)
}

So that's the code, If I run the MongoShell I get the correct results ::

{
"_id" : ObjectId("528cb19def5c88795f00000a"),
"id" : "00000011",
"firstName" : "Gerardo",
"surname" : "Guilfoos",
"gender" : "M",
"address1" : "854 Cheerful Breeze Way",
"address2" : "",
"city" : "Tavaux",
"state_region" : "Franche-Comté",
"county_province" : "Jura",
"postalCode" : "39501 CEDEX",
"country" : "FR",
"acct_balance" : 172.87,
"status" : "B"

}

But the Go file when run gives me this::

One Result:  {ObjectIdHex("528cb19def5c88795f00000a") 0           0 }

I'm following along a course from Udemy and they provide the data structures. Unfortunately for me, the examples they provide are all in PHP so I kind of have to figure out a way to convert all of the code to Go which has been weird.

Also on a second note:: How does one insert a data that matches that struct into a mongoDB collection? I tried this but it has been a failure.

err = c.Insert(&Customer{"id": 1, "firstName": "Joe", "surname": "Hat", "gender": "M", "address1": "46 Pine Road", "address2": "Apartment 1613", "city": "Scarborough", "state_region": "G.T.A", "county_provine": "Ontario", "postalCode": "M1L 1N1", "country": "Canada", "acct_bal": 8.90, "status": "AAA",})
  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享
  • 邀请回答

1条回答

  • douche1913 douche1913 6年前

    Export the field names.

    type Customer struct {
        Id              bson.ObjectId `bson:"_id,omitempty"`
        ID              int           `bson:"id"`
        FirstName       string        `bson:"firstName"`
        Surname         string        `bson:"surname"`
        Gender          string        `bson:"gender"`
        Address1        string        `bson:"address1"`
        Address2        string        `bson:"address2"`
        City            string        `bson:"city"`
        State_region    string        `bson:"state_region"`
        County_province string        `bson:"county_province"`
        PostalCode      string        `bson:"postalCode"`
        Country         string        `bson:"country"`
        Acct_bal        float64       `bson:"acct_bal"`
        Status          string        `bson:"status"`
    }
    

    The BSON encoder serializes exported fields only. Other serializers such as encoding/json and encoding/gob also work with exported fields only.

    点赞 评论 复制链接分享