LoginSignup
4
2

More than 5 years have passed since last update.

Cloudantに格納されているJSONデータをまとめて削除する

Last updated at Posted at 2016-06-08

やりたいこと

IoT関連のアプリでデバイスからのデータのリポジトリにCloudantを利用する機会が多いんだけど、データがどんどん溜まっていくので過去1日分とか1週間分とか1ヶ月分とかいう単位でまとめてJSONデータを削除したい。

手順

  1. 1週間とか1日とか、まとめて削除したいJSONデータの"_id"と"_rev"を抽出する
  2. 抽出したデータに "_deleted": true を追加して削除対象JSONリストを作成
  3. 削除対象JSONリストを元にバルク削除を実行

やってみた :sunglasses:

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/

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2