-
Notifications
You must be signed in to change notification settings - Fork 0
/
mongo.go
74 lines (66 loc) · 1.97 KB
/
mongo.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package gldb
import (
"labix.org/v2/mgo"
"labix.org/v2/mgo/bson"
)
type MongoGLDB struct{ *mgo.Database }
func (db MongoGLDB) AddReviewAndRelatedData(r *Review, metro string, sociographic string, comment string, loadables []interface{}) {
for _, obj := range loadables {
switch obj.(type) {
case *Guide:
db.C("guides").Upsert(bson.M{"URL": obj.(*Guide).URL}, obj)
case *Doable:
db.C("doables").Upsert(bson.M{"URL": obj.(*Doable).URL}, obj)
}
}
db.C("reviewPeriods").Upsert(bson.M{
"ReviewerURL": r.ReviewerURL,
"ReviewPeriodStartTime": r.ReviewPeriodStartTime,
"ReviewPeriodEndTime": r.ReviewPeriodEndTime,
}, &ReviewPeriod{
ReviewerURL: r.ReviewerURL,
ReviewPeriodStartTime: r.ReviewPeriodStartTime,
ReviewPeriodEndTime: r.ReviewPeriodEndTime,
Metro: metro,
SociographicData: sociographic,
Comment: comment,
})
db.C("reviews").Insert(r)
return
}
func (db MongoGLDB) SubjectsInMetro(metro, quality string) (result []*SubjectInMetro) {
subjects := []string{}
err := db.C("guides").Find(bson.M{"qualities": quality, "metro": metro}).Distinct("subject", &subjects)
if err != nil {
panic("Failed to get skills" + err.Error())
}
result = make([]*SubjectInMetro, len(subjects))
for i, t := range subjects {
guides := []*Guide{}
result[i] = &SubjectInMetro{metro, t, guides}
err := db.C("guides").Find(bson.M{"subject": t, "metro": metro}).All(&guides)
if err != nil {
panic("Failed to get guides: " + err.Error())
}
result[i].Guides = guides
}
return
}
func (db MongoGLDB) DoablesForSubjectInMetro(metro, subject string) (result []*Doable) {
err := db.C("doables").Find(bson.M{"metro": metro, "subjects": subject}).All(&result)
if err != nil {
panic(err)
}
return
}
func GLDBFromMongoURL(url string) (d GLDB, err error) {
session, err := mgo.Dial(url)
if err != nil {
return
}
return MongoGLDB{session.DB("")}, nil
}
func (db MongoGLDB) Close() {
db.Session.Close()
return
}