2016-09-07 10 views
0

J'ai un document de série temporelle pour stocker les données de plusieurs capteurs d'un périphérique/1 /. Dans l'exemple, deviceId A-1 aMongoDB: interroger ou agréger pour obtenir différentes données de mesure dans un plan en une seule fois

1)geo info("longitude" : 0.6644560403052914, "latitude" : 0.7165033050936503), 
2)temperature, ("sensorType" : "temperature","sensorValue" : "14") 
3)humidity, ("sensorType" : "humidity", "sensorValue" : "12") 

La requête est basée sur la gamme de temps selon createdate, comment pourrais-je utiliser une requête ou une agrégation pour obtenir trois tableaux de géo information, de la température et de l'humidité et de la façon de choisir l'index et le type d'index?

/1/structure de données

{ 
     "_id" : "7736b113586a4314bfbe036cf6b3e34c", 
     "createDate" : ISODate("2016-08-30T16:30:33.007Z"), 
     "deviceId" : "A-1", 
     "vendorCode" : "01", 
     "longitude" : 0.6644560403052914, 
     "latitude" : 0.7165033050936503, 
     "sensorList" : [ 
       { 
         "_id" : "1802b2792cac4529b269d5e2c9398e80", 
         "createDate" : ISODate("2016-08-30T16:30:33.007Z"), 
         "sensorType" : "temperature", 
         "sensorId" : 1, 
         "sensorValue" : "14" 
       }, 
       { 
         "_id" : "ddbe2d76770c42cfabc8d22d7c732826", 
         "createDate" : ISODate("2016-08-30T16:30:33.007Z"), 
         "sensorType" : "humidity", 
         "sensorId" : 2, 
         "sensorValue" : "12" 
       } 
     ] 
} 

Répondre

0

Ce n'est pas encore la réponse, mais je voulais vous montrer où je suis arrivé. Je suis un peu perplexe de faire tout cela dans une agrégation. Mongo ingénieur a déclaré qu'il n'est pas recommandé de mettre un certain niveau d'opération au niveau de la base de données car la ressource de base de données est limitée.

> db.foo.aggregate([ 
...  // First project out the fields we don't need. geoInfo only requires latitude and longitude so let's take care of it first. 
...  {"$project": {"_id": 0, "geoInfo": {"longitude": "$longitude", "latitude": "$latitude"}, "sensorList": 1}}, 
...  // Now let's group based on the sensorType, we need to unwind our array first 
...  {"$unwind": "$sensorList"}, 
...  {"$group": { 
...   "_id": "$sensorList.sensorType", 
...   "value": {"$first": "$sensorList.sensorValue"}, 
...   "geoInfo": {"$push": "$geoInfo"} 
...  }} 
... ]); 

{ "_id" : "humidity", "value" : "12", "geoInfo" : [ { "longitude" : 0.6644560403052914, "latitude" : 0.7165033050936503 } ] } 

{ "_id" : "temperature", "value" : "14", "geoInfo" : [ { "longitude" : 0.6644560403052914, "latitude" : 0.7165033050936503 } ] } 
+0

Alors oublie ce fil. – user84592

+0

Remerciez vos efforts! – user84592