recorder.go 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package mongo
  2. import (
  3. "labix.org/v2/mgo"
  4. "labix.org/v2/mgo/bson"
  5. )
  6. // Recorder record device data
  7. type Recorder struct {
  8. session *mgo.Session
  9. set string
  10. collection string
  11. }
  12. // NewRecorder create a recorder
  13. func NewRecorder(host string, set string, collection string) (*Recorder, error) {
  14. sess, err := mgo.Dial(host)
  15. if err != nil {
  16. return nil, err
  17. }
  18. sess.DB(set).C(collection).EnsureIndexKey("deviceid", "timestamp")
  19. return &Recorder{
  20. session: sess,
  21. set: set,
  22. collection: collection,
  23. }, nil
  24. }
  25. // Insert insert data
  26. func (r *Recorder) Insert(args interface{}) error {
  27. dbHandler := r.session.DB(r.set).C(r.collection)
  28. err := dbHandler.Insert(args)
  29. if err != nil {
  30. return err
  31. }
  32. return nil
  33. }
  34. // FindLatest find latest device data
  35. func (r *Recorder) FindLatest(deviceid uint64, record interface{}) error {
  36. dbHandler := r.session.DB(r.set).C(r.collection)
  37. err := dbHandler.Find(bson.M{
  38. "$query": bson.M{"deviceid": deviceid},
  39. "$orderby": bson.M{"timestamp": -1},
  40. }).Limit(1).One(record)
  41. return err
  42. }
  43. // FindByTimestamp find by timestmp
  44. func (r *Recorder) FindByTimestamp(deviceid uint64, start uint64, end uint64, records interface{}) error {
  45. dbHandler := r.session.DB(r.set).C(r.collection)
  46. err := dbHandler.Find(bson.M{
  47. "deviceid": deviceid,
  48. "timestamp": bson.M{"$gte": start, "$lte": end},
  49. }).All(records)
  50. return err
  51. }