Skip to content

Instantly share code, notes, and snippets.

@border
Created August 27, 2012 15:33
Show Gist options
  • Select an option

  • Save border/3489566 to your computer and use it in GitHub Desktop.

Select an option

Save border/3489566 to your computer and use it in GitHub Desktop.
mgo example
package main
import (
"fmt"
"labix.org/v2/mgo"
"labix.org/v2/mgo/bson"
"time"
)
type Person struct {
ID bson.ObjectId `bson:"_id,omitempty"`
Name string
Phone string
Timestamp time.Time
}
var (
IsDrop = true
)
func main() {
session, err := mgo.Dial("127.0.0.1")
if err != nil {
panic(err)
}
defer session.Close()
session.SetMode(mgo.Monotonic, true)
// Drop Database
if IsDrop {
err = session.DB("test").DropDatabase()
if err != nil {
panic(err)
}
}
// Collection People
c := session.DB("test").C("people")
// Index
index := mgo.Index{
Key: []string{"name", "phone"},
Unique: true,
DropDups: true,
Background: true,
Sparse: true,
}
err = c.EnsureIndex(index)
if err != nil {
panic(err)
}
// Insert Datas
err = c.Insert(&Person{Name: "Ale", Phone: "+55 53 1234 4321", Timestamp: time.Now()},
&Person{Name: "Cla", Phone: "+66 33 1234 5678", Timestamp: time.Now()})
if err != nil {
panic(err)
}
// Query One
result := Person{}
err = c.Find(bson.M{"name": "Ale"}).Select(bson.M{"phone": 0}).One(&result)
if err != nil {
panic(err)
}
fmt.Println("Phone", result)
// Query All
var results []Person
err = c.Find(bson.M{"name": "Ale"}).Sort("-timestamp").All(&results)
if err != nil {
panic(err)
}
fmt.Println("Results All: ", results)
// Update
colQuerier := bson.M{"name": "Ale"}
change := bson.M{"$set": bson.M{"phone": "+86 99 8888 7777", "timestamp": time.Now()}}
err = c.Update(colQuerier, change)
if err != nil {
panic(err)
}
// Query All
err = c.Find(bson.M{"name": "Ale"}).Sort("-timestamp").All(&results)
if err != nil {
panic(err)
}
fmt.Println("Results All: ", results)
}
@kevinhide
Copy link
Copy Markdown

Hi guys,
If i have probably 4 server of mongodb. 1 server active(main), and the others server are slave which the active(main) server somehow can switch as slave, and slave can switch as active(main) automatic . how i develop the code to get only the active(main) server only? active(main) server means you can do add, remove, find process in that server only. Thanks before.

Checkout this : https://docs.mongodb.com/manual/reference/method/db.currentOp/

@chhabraamit
Copy link
Copy Markdown

it would be so nice if we could pass a golang struct in the find method (the same struct which we inserted).

@DasoTD
Copy link
Copy Markdown

DasoTD commented Jan 19, 2022

thanks for this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment