ここではいくつかのオプションがあると思いますが、私はビューもその1つだとは思わないのです。私は、ビューは挿入/更新時にのみ計算されると信じています。
最初のオプションは、Cloudant Queryを使用することです。これに伴う問題は、あなたがをループするために持っているすべてのエントリをカウントしますです
"selector": {
"$and": [
{"created_at" : { "$gt": 1506874127 }},
{"created_at": { "$lt": 1506960651 }}
]
}
:あなたのcreated_at
フィールドにインデックスを作成し、次のセレクタを使用することができます。代替経路は、Cloudant Searchを使用することです。次のようなCloudantで検索インデックスを作成します。
{
"_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}"
}
}
}
Cloudantダッシュボード使用する場合は、次のように対応しています
設計ドキュメント= allDocs
インデックス名= byCreatedAt
インデックスを関数=
function (doc) {
if (doc.created_at && doc.device_id) {
index("created_at", doc.created_at);
index("device_id", doc.device_id);
}
}
次に、範囲を使用して検索を実行することができます。範囲は24時間前から今すぐになります。group_field=device_id
を指定すると、結果がデバイスIDでグループ化されます。例えば、
https://<YOUR_INSTANCE>.cloudant.com/<YOUR_DB>/_design/allDocs/_search/byCreatedAt?q=created_at%3A[1506874127%20TO%201506960651]&group_field=device_id&limit=1
はここで検索クエリがある:私はUNIXタイムスタンプを使用しています
created_at:[1506874127 TO 1506960651]
。あなたは、私が信じる日付の文字列を使うこともできます。また、制限を1に設定します。これは、合計カウントのみを必要とするため、各グループの最初のエントリのみを返します(グループクエリでは制限= 0は許可されません)。ここではサンプルの結果は次のとおりです。
{
"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":{
}
}
]
}
]
}
by
フィールドには、デバイスIDです。
同様の問題がありました...クラウドに保存していたJSONのドキュメントに作成された時間を追加しました。それに基づいてビューを作成しました。 –