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 }
golang-mongodb范例
免责声明:文章转载自《golang-mongodb范例》仅用于学习参考。如对内容有疑问,请及时联系本站处理。
上篇iptables使用总结rexec/rlogin/rsh介绍下篇
宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=