やりたいこと
IoT関連のアプリでデバイスからのデータのリポジトリにCloudantを利用する機会が多いんだけど、データがどんどん溜まっていくので過去1日分とか1週間分とか1ヶ月分とかいう単位でまとめてJSONデータを削除したい。
手順
- 1週間とか1日とか、まとめて削除したいJSONデータの"_id"と"_rev"を抽出する
- 抽出したデータに "_deleted": true を追加して削除対象JSONリストを作成
- 削除対象JSONリストを元にバルク削除を実行
やってみた
1. 1週間とか1日とか、まとめて削除したいJSONデータの"_id"と"_rev"を抽出する
こんなJSONデータで試しました。
{
"_id": "0370934188fe1e9281aea6b2ed0bbdc6",
"_rev": "1-ce846c90c2ada27231b1873982cfbe71",
"日時": "2015/08/01 19:22:16",
"料金": "1629632.20",
"カウンタ": "0"
}
まずはCloudant Queryで削除したい範囲を検索します。
"2015/08/01 19:25:00" 〜 "2015/08/01 19:26:00" で試しました。
抽出に実行するCloudant Queryはこちら
"selector": {
"日時": {
"$gte": "2015/08/01 19:25:00" , "$lt": "2015/08/01 19:26:00"
}
},
"fields": [
"_id",
"_rev"
],
"sort": [
{
"_id": "asc"
}
クエリを実行
curl -X POST -u ユーザー名:パスワード 'https://自分のアカウント名.cloudant.com/データベース名/_find' -H 'Content-Type: application/json' -d '{
"selector": {
"日時": {
"$gte": "2015/08/01 19:25:00" , "$lt": "2015/08/01 19:26:00"
}
},
"fields": [
"_id",
"_rev"
],
"sort": [
{
"_id": "asc"
}
]
}' -o delete_list.json | jq
結果(delete_list.json)
{
"docs": [
{
"_id": "0370934188fe1e9281aea6b2ed0bd24b",
"_rev": "1-c14b9f56d6581fa74aa6eed6f73ceba0"
},
{
"_id": "49b4ccc000942b49e8dd622a499c563a",
"_rev": "1-466fe7daf9463d151147485a020046f6"
},
{
"_id": "8541c09aa7f1cedebef99bab07ee9716",
"_rev": "1-beedcf978a98a66666cc0571876d459b"
},
{
"_id": "9843508c5ef7a609f66173043ccebf8f",
"_rev": "1-974091ffdd84e66113f7fff324f21a8d"
}
]
}
2. 抽出したデータに "_deleted": true を追加して削除対象JSONリストを作成
すみません、力業です。エディターなりスクリプトなりで "_deleted": true を追加します。
{
"docs":[
{
"_id":"0370934188fe1e9281aea6b2ed0bd24b",
"_rev":"1-c14b9f56d6581fa74aa6eed6f73ceba0",
"_deleted": true
},
{
"_id":"49b4ccc000942b49e8dd622a499c563a",
"_rev":"1-466fe7daf9463d151147485a020046f6",
"_deleted": true
},
{
"_id":"8541c09aa7f1cedebef99bab07ee9716",
"_rev":"1-beedcf978a98a66666cc0571876d459b",
"_deleted": true
},
{
"_id":"9843508c5ef7a609f66173043ccebf8f",
"_rev":"1-974091ffdd84e66113f7fff324f21a8d",
"_deleted": true
}
]}
3. 削除対象JSONリストを元にバルク削除を実行
curl -X POST -u ユーザー名:パスワード 'https://アカウント名.cloudant.com/データベース名/_bulk_docs' -H 'Content-Type: application/json' -d@delete_list.json
[{"ok":true,"id":"0370934188fe1e9281aea6b2ed0bd24b","rev":"2-86e31665a439b70ee4a6f9bba51e21f8"},
{"ok":true,"id":"49b4ccc000942b49e8dd622a499c563a","rev":"2-bb140b077868ebe83220239ce7a593e5"},
{"ok":true,"id":"8541c09aa7f1cedebef99bab07ee9716","rev":"2-e9941dd421292952565b4dcf37fe2c3a"},
{"ok":true,"id":"9843508c5ef7a609f66173043ccebf8f","rev":"2-c73aa3ede26b2241299a9da7fec80709"}]
参考URLなど
・Bulk Operations
https://docs.cloudant.com/document.html#bulk-operations
・Using Cloudant Query Tutorial
https://cloudant.com/using-cloudant-query-tutorial/
・Accessing the API Using cURL Tutorial
https://cloudant.com/accessing-the-api-using-curl-tutorial/