MongoDB
The mongo
adapter for MongoDB wraps the labix.org/v2/mgo
driver
written by Gustavo Niemeyer.
Known limitations
- Does not support transactions.
- Does not support the
db
tag. You must use bson tags instead. - Does not support query builder.
Installation
If you want to install the package with go get
, you’ll need the bazaar
version control system.
You can install bzr
like this:
sudo apt-get install bzr -y
After bazaar is installed, use go get
to download and install the adapter.
go get upper.io/db.v2/mongo
Setting up database access
The mongo.ConnectionURL{}
struct is defined as follows:
// ConnectionURL implements a MongoDB connection struct.
type ConnectionURL struct {
User string
Password string
Host string
Database string
Options map[string]string
}
Pass the mongo.ConnectionURL
value as argument for mongo.Open()
to create a mongo.Database
session.
A mongo.ParseURL()
function is provided to convert a DSN into a
mongo.ConnectionURL
:
// ParseURL parses s into a ConnectionURL struct.
mongo.ParseURL(s string) (ConnectionURL, error)
Usage
Import the upper.io/db.v2/mongo
package into your application:
// main.go
package main
import (
"upper.io/db.v2/mongo"
)
Then, you can use the mongo.Open()
method to create a session:
var settings = mongo.ConnectionURL{
Host: "localhost", // PostgreSQL server IP or name.
Database: "peanuts", // Database name.
User: "cbrown", // Optional user name.
Password: "snoopy", // Optional user password.
}
sess, err = mongo.Open(settings)
Example
The Go code below will add some rows to the “birthday” collection and then will print the same rows that were inserted.
// example.go
package main
import (
"fmt"
"log"
"time"
"upper.io/db.v2/mongo"
)
var settings = mongo.ConnectionURL{
Database: `upperio_tests`,
Host: `127.0.0.1`,
}
type Birthday struct {
// Maps the "Name" property to the "name" column
// of the "birthday" table.
Name string `bson:"name"`
// Maps the "Born" property to the "born" column
// of the "birthday" table.
Born time.Time `bson:"born"`
}
func main() {
// Attemping to establish a connection to the database.
sess, err := mongo.Open(settings)
if err != nil {
log.Fatalf("db.Open(): %q\n", err)
}
defer sess.Close() // Remember to close the database session.
// Pointing to the "birthday" table.
birthdayCollection := sess.Collection("birthday")
err = birthdayCollection.Truncate()
if err != nil {
log.Fatalf("Truncate(): %q\n", err)
}
// Inserting some rows into the "birthday" table.
birthdayCollection.Insert(Birthday{
Name: "Hayao Miyazaki",
Born: time.Date(1941, time.January, 5, 0, 0, 0, 0, time.UTC),
})
birthdayCollection.Insert(Birthday{
Name: "Nobuo Uematsu",
Born: time.Date(1959, time.March, 21, 0, 0, 0, 0, time.UTC),
})
birthdayCollection.Insert(Birthday{
Name: "Hironobu Sakaguchi",
Born: time.Date(1962, time.November, 25, 0, 0, 0, 0, time.UTC),
})
// Let's query for the results we've just inserted.
res := birthdayCollection.Find()
// Query all results and fill the birthday variable with them.
var birthday []Birthday
err = res.All(&birthday)
if err != nil {
log.Fatalf("res.All(): %q\n", err)
}
// Printing to stdout.
for _, birthday := range birthday {
fmt.Printf(
"%s was born in %s.\n",
birthday.Name,
birthday.Born.Format("January 2, 2006"),
)
}
}
Running the example above:
go run main.go
Expected output:
Hayao Miyazaki was born in January 5, 1941.
Nobuo Uematsu was born in March 21, 1959.
Hironobu Sakaguchi was born in November 25, 1962.