recorder.go 1.2 KB

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