Je pense que vous avez quelques options ici, mais je ne pense pas qu'une vue est l'un d'entre eux. Je crois que les vues ne sont calculées qu'au moment de l'insertion/mise à jour.
Votre première option consiste à utiliser Cloudant Query. Vous pouvez créer un index sur votre champ created_at
et utilisez le sélecteur suivant:
"selector": {
"$and": [
{"created_at" : { "$gt": 1506874127 }},
{"created_at": { "$lt": 1506960651 }}
]
}
Le problème avec ceci est que vous devrez parcourir en boucle et compter toutes les entrées. Une route alternative serait d'utiliser Cloudant Search. Créer un index de recherche dans Cloudant similaire à ce qui suit:
{
"_id": "_design/allDocs",
"views": {},
"language": "javascript",
"indexes": {
"byCreatedAt": {
"analyzer": "standard",
"index": "function (doc) {\n if (doc.created_at && doc.device_id) {\n index(\"created_at\", doc.created_at);\n index(\"device_id\", doc.device_id);\n }\n}"
}
}
}
Cela correspond à ce qui suit lors de l'utilisation du tableau de bord Cloudant:
conception doc = allDocs
nom d'index = byCreatedAt
index fonction =
function (doc) {
if (doc.created_at && doc.device_id) {
index("created_at", doc.created_at);
index("device_id", doc.device_id);
}
}
Ensuite, vous pouvez lancer une recherche en utilisant une plage - où la plage serait l'heure il y a 24 heures à l'heure actuelle - et spécifier group_field=device_id
pour regrouper les résultats par ID de périphérique. Par exemple,
https://<YOUR_INSTANCE>.cloudant.com/<YOUR_DB>/_design/allDocs/_search/byCreatedAt?q=created_at%3A[1506874127%20TO%201506960651]&group_field=device_id&limit=1
Voici la requête de recherche est:
created_at:[1506874127 TO 1506960651]
J'utilise timestamp unix. Vous pouvez également utiliser des chaînes de date, je crois. J'ai également mis la limite à 1. Cela retournera seulement la première entrée dans chaque groupe puisque vous voulez seulement le compte total (la limite = 0 n'est pas permise pour des requêtes groupées). Voici un exemple de résultat:
{
"total_rows":3,
"groups":[
{
"by":"1",
"total_rows":2,
"rows":[
{
"id":"263a81ea76528dead3a4185df3676f62",
"order":[
1.0,
0
],
"fields":{
}
}
]
},
{
"by":"2",
"total_rows":1,
"rows":[
{
"id":"d857ac5c58eebde4c21ffdcf3e0fd321",
"order":[
1.0,
0
],
"fields":{
}
}
]
}
]
}
Le champ by
est l'ID du périphérique.
J'ai eu un problème similaire ... J'ai simplement ajouté du temps au document JSON que j'enregistrais dans le cloud. Puis créé une vue basée sur elle. –