2015-11-10 81 views
1

我有一個客戶的要求,清理應用程序從30天以上的cloudant上的特定視圖中的所有文件。我對雲文檔進行了一些搜索,但找不到任何此類功能來設置文檔的到期日期。在線搜索產生了一個非常相似的查詢,但沒有答案。有誰知道什麼是實現這一目標的最佳方式?請告訴我。 爲清理工作設置一個類似日常調度程序的東西要比爲它編寫新程序要簡單得多。有沒有辦法從數據庫中過期文件?

+0

我發現了一些看起來很有希望的東西。我看到一個腳本和捲曲的組合是否可以完成這項工作。需要做一個簡單的測試。 https://cloudant.com/accessing-the-api-using-curl-tutorial/ – Avi

回答

1

我們假設當前日期爲2015-11-10T17:44:31+00:00(採用ISO 8601格式)。你必須與2015-10-10T17:44:31.000Z時間戳的文件:

{ 
    "_id": "791bb0b8ff1d8f2be5dd15893ca4a85f", 
    "_rev": "1-b1007c119c53fccb69fae396028d16e1", 
    "timestamp": "2015-10-10T17:44:31.000Z" 
} 

而且隨着2015-10-12T17:44:31.000Z時間戳另一個文件:

{ 
    "_id": "791bb0b8ff1d8f2be5dd15893cbe6e2b", 
    "_rev": "1-d068d8b63ca848406082f31e4b20e927", 
    "timestamp": "2015-10-12T17:44:31.000Z" 
} 

你想查詢的是不超過30天的文件,這將包括第二份文件,但不包括第一份。創建於timestamp領域的指標(在你的應用程序,你可能會添加其他字段到索引,這樣就可以將這些字段添加到您的查詢):

{ 
    "index": { 
    "fields": [ 
     "timestamp" 
    ] 
    }, 
    "type": "json" 
} 

計算ISO 8601時間戳30天前。在JavaScript:

var currentTime = new Date("2015-11-10T17:44:31+00:00"); 
var thirtyDaysAgo = new Date(currentTime.getTime() - (30 * 24 * 3600 * 1000)); 
console.log(thirtyDaysAgo.toISOString()); 

這應該爲您提供的2015-10-11T17:44:31.000Z時間戳。那麼,讓的查詢有時間戳大於或等於這個時候文件:

{ 
    "selector": { 
    "timestamp": { 
     "$gte": "2015-10-11T17:44:31.000Z" 
    } 
    } 
} 

此查詢僅返回與2015-10-12T17:44:31.000Z時間戳較新的文件。正如我前面提到的那樣,您可能還想向索引添加其他字段,然後針對這些字段進行查詢。

+0

謝謝!我正在研究此問題,並會很快通知您。 – Avi

相關問題