MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

MongoDB:Có cách nào để phát hiện xu hướng giá trị bằng cách sử dụng tổng hợp không?

Dàn ý sơ lược:Tôi sẽ tính giá trị trung bình trong khoảng thời gian mười phút:

> var avgCursor = db.sensor_readings.aggregate([
    { "$match" : { "created_at" : { "$gt" : ten_minutes_ago, "$lte" : now } } }
    { "$group" : { "_id" : 0, "average" : { "$avg" : "$value" } } }
]}
> var avgDoc = avgCursor.toArray()[0]
> avgDoc
{ "_id" : 0, "average" : 23 }

Sau đó, tôi sẽ lưu trữ nó trong một bộ sưu tập khác:

> db.sensor_averages.insert({ "start" : ten_minutes_ago, "end" : now, "average" : avgDoc.average })

Cuối cùng, hãy nhớ lại hai giá trị trung bình mà bạn cần để tính toán sự khác biệt và tính toán nó:

> var diffCursor = db.sensor_averages.find({ "start" : { "$gte" : twenty_minutes_ago } }).sort({ "start" : -1 })
> var diffArray = diffCursor.toArray()
> var difference = diffArray[0].average - diffArray[1].average

Bạn cũng có thể bỏ qua các tổng hợp định kỳ và thay vào đó, cập nhật mức trung bình hoạt động trong sensor_averages , chuyển sang một tài liệu mới cứ sau 10 phút. Vào đầu mỗi khoảng thời gian 10 phút, hãy chèn vào sensor_averages một tài liệu

{
    "start" : now,
    "svalues" : 0,
    "nvalues" : 0
}

sau đó trên mỗi lần chèn một sensor_reading tài liệu trong mười phút tới, đồng thời cập nhật sensor_averages doc:

db.sensor_averages.update(
    { "start" : now_rounded_to_the_ten_minute_boundary },
    { "$inc" : { "svalues" : value, "nvalues" : 1 } }
)

Sau đó, khi bạn muốn sự khác biệt giữa các giá trị trung bình, hãy nhớ lại hai tài liệu thích hợp, chia svalues bởi nvalues để lấy giá trị trung bình và trừ đi.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Cấu trúc phân cấp xây dựng Mongodb $ graphLookup

  2. bson.D và bson.M cho các truy vấn tìm kiếm

  3. MongoDB và Cassandra

  4. Mongoid 3 + Heroku (MongoHQ) gây ra Moped ::Lỗi ::Hoạt độngFailure

  5. mongodb $ nơi truy vấn để tìm nạp nội dung tài liệu con