MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

MongoDB:Има ли начин да се открие тенденция на стойност с помощта на агрегиране?

Груба схема:Бих изчислил средната стойност за десетминутен период:

> 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 }

Тогава бих го съхранил в друга колекция:

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

Накрая си припомнете двете средни стойности, от които се нуждаете, за да изчислите разликата, и я изчислете:

> 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

Можете също така да пропуснете периодичните агрегирания и вместо това да поддържате текуща средна стойност актуализирана в sensor_averages , преминавайки към нов документ на всеки 10 минути. В началото на всеки 10-минутен период вмъквайте в sensor_averages документ

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

след това при всяко вмъкване на sensor_reading документ за следващите десет минути, актуализирайте и sensor_averages документ:

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

След това, когато искате разликата между средните стойности, извикайте подходящите два документа, разделете svalues от nvalues за да получите средната стойност и извадете.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Персонализирана десериализация

  2. разрешаване на обещание с помощта на mongodb и nodejs

  3. Groovy не можа да намери съвпадащ конструктор?

  4. Как мога да заредя данни от колекция mongodb в DataFrame на pandas?

  5. MongoDB брои елементи в масив