|
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 >
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 >
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 }
|
|
|