123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263 |
- package mongo
- import (
- "labix.org/v2/mgo"
- "labix.org/v2/mgo/bson"
- )
- // Recorder record device data
- type Recorder struct {
- session *mgo.Session
- set string
- collection string
- }
- // NewRecorder create a recorder
- 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
- }
- // Insert insert data
- 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
- }
- // FindLatest find latest device data
- 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
- }
- // FindByTimestamp find by timestmp
- 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
- }
|