golang-mongodb范例

  1 package main
  2 
  3 import (
  4     "log"
  5 
  6     "gopkg.in/mgo.v2"
  7     "gopkg.in/mgo.v2/bson"
  8 )
  9 
 10 type Address struct {
 11     Address string
 12 }
 13 type Location struct {
 14     Longitude float64
 15     Latitude  float64
 16 }
 17 
 18 type Person struct {
 19     Id       bson.ObjectId `bson:"_id"`
 20     Name     string
 21     Age_Int  int 
 22     Address  []Address
 23     Location Location
 24 }
 25 
 26 func main() {
 27     log.SetFlags(log.Flags() | log.Lshortfile)
 28     //连接
 29     session, err := mgo.Dial("127.0.0.1:27017")
 30     if err != nil {
 31         log.Println(err)
 32         return
 33     }   
 34     //设置模式
 35     session.SetMode(mgo.Monotonic, true)
 36     //获取文档集
 37     collection := session.DB("test").C("person")
 38     // 创建索引
 39     index := mgo.Index{
 40         Key:        []string{"name"}, // 索引字段, 默认升序,若需降序在字段前加-
 41         Unique:     true,             // 唯一索引 同mysql唯一索引
 42         DropDups:   true,             // 索引重复替换旧文档,Unique为true时失效
 43         Background: true,             // 后台创建索引
 44     }   
 45     if err := collection.EnsureIndex(index); err != nil {
 46         log.Println(err)
 47         return
 48     }   
 49     if err := collection.EnsureIndexKey("$2dsphere:location"); err != nil { // 创建一个范围索引
 50         log.Println(err)
 51         return
 52     }   
 53     //添加记录
 54     person := Person{
 55         Id:      bson.NewObjectId(),
 56         Name:    "逍遥",
 57         Age_Int: 24, 
 58         Address: []Address{
 59             Address{
 60                 Address: "仙灵岛",
 61             },  
 62         },  
 63         Location: Location{
 64            Longitude: 1,
 65             Latitude:  1,
 66         },
 67     }
 68     if err := collection.Insert(person); err != nil {
 69         log.Println(err)
 70         return
 71     }
 72     //查找记录
 73     newPerson := &Person{}
 74     if err := collection.Find(bson.M{"age_int": 24}).One(newPerson); err != nil {
 75         log.Println(err)
 76         return
 77     }
 78     //修改记录
 79     if err := collection.Update(bson.M{"age_int": 24}, bson.M{"$set": bson.M{"age_int": 26}}); err != nil {
 80         log.Println(err)
 81         return
 82     }
 83     //删除记录
 84     //if err := collection.Remove(bson.M{"age_int": 26}); err != nil {
 85     //  log.Println(err)
 86     //  return
 87     //}
 88     //位置搜索
 89     selector := bson.M{
 90         "location": bson.M{
 91             "$near": bson.M{
 92                 "$geometry": bson.M{
 93                     "type":        "Point",
 94                     "coordinates": []float64{1, 1},
 95                 },
 96                 "$maxDistance": 1,
 97                 //"$minDistance": 0,
 98             },
 99         },
100     }
101     if err := collection.Find(selector).One(newPerson); err != nil {
102         log.Println(err)
103         return
104     }
105     //
106     session.Close()
107 }
原文地址:https://www.cnblogs.com/--xiaoyao--/p/5284685.html