-
Notifications
You must be signed in to change notification settings - Fork 83
/
recorder.go
58 lines (46 loc) · 1.21 KB
/
recorder.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
package mongo
import (
"labix.org/v2/mgo"
"labix.org/v2/mgo/bson"
)
type Recorder struct {
session *mgo.Session
set string
collection string
}
func NewRecorder(host string, set string, collection string) (*Recorder, error) {
sess, err := mgo.Dial(host)
if err != nil {
return nil, err
}
sess.DB(set).C(collection).EnsureIndexKey("deviceid", "timestamp")
return &Recorder{
session: sess,
set: set,
collection: collection,
}, nil
}
func (r *Recorder) Insert(args interface{}) error {
dbHandler := r.session.DB(r.set).C(r.collection)
err := dbHandler.Insert(args)
if err != nil {
return err
}
return nil
}
func (r *Recorder) FindLatest(deviceid uint64, record interface{}) error {
dbHandler := r.session.DB(r.set).C(r.collection)
err := dbHandler.Find(bson.M{
"$query": bson.M{"deviceid": deviceid},
"$orderby": bson.M{"timestamp": -1},
}).Limit(1).One(record)
return err
}
func (r *Recorder) FindByTimestamp(deviceid uint64, start uint64, end uint64, records interface{}) error {
dbHandler := r.session.DB(r.set).C(r.collection)
err := dbHandler.Find(bson.M{
"deviceid": deviceid,
"timestamp": bson.M{"$gte": start, "$lte": end},
}).All(records)
return err
}