2017-06-02 36 views
2

我有一個集合activities它包含一個字段activityDate包含日期像2017-02-24T19:04:18Z如何從CosmosDB刪除記錄特定天回

我想從這個集合這是舊的那numberOfDays刪除所有記錄。

我寫cosmosdb存儲過程執行此任務

我嘗試像

var query = 'SELECT * FROM activities a WHERE a.activityDate > = "' + numberOfDays+ '"'; 

我現在面臨的問題執行查詢,因爲它不是語法正確

還是可以有一些另一種做法。

在此先感謝。

回答

0

您需要比較a.activityDatetoday減去numberOfDays。減法的最簡單方法是將ISO-8601字符串轉換爲Date對象,然後向其添加1000 * 60 * 60 * 24 * numberOfDays,然後使用Date對象中的方法將其轉換回ISO-8601字符串( Date.toISOString()在JavaScript中,但您的語言可能會有所不同)。在WHERE子句中使用JavaScript表達式可能有一些方法,但我不知道。即使有,我也不會推薦它,因爲這樣做會使查詢成爲全表掃描。所以,我建議你做這個轉換和減法客戶端來得到一個標量字符串放入您的查詢子句。

-1

這裏是我的問題的解決方案:

// SAMPLE STORED PROCEDURE 
function deleteActivitiesBackDate(numberOfDays) { 
    var context = getContext(); 
    var collection = context.getCollection(); 
    var link = collection.getSelfLink(); 
    var response = context.getResponse(); 

//validate inputs 
    if(!numberOfDays || (typeof numberOfDays != "string")){ 
    return errorResponse(400, (!numberOfDays) ? "numberOfDays is Undefined":"String type is expected for numberOfDays."); 
    } 

var targetDate = new Date(); 

targetDate.setDate(targetDate.getDate() - numberOfDays); 
console.log("targetDate is "+targetDate); 


    var query = 'SELECT * FROM activities a WHERE a.activityDate < "' + targetDate+ '"'; 
    var run = collection.queryDocuments(link, query, {}, callback); 
    function callback(err, docs) { 
    if (err){ 
     return errorResponse(400, err.message); 
    } 
    if (docs.length > 0){ 
     deleteDoc(docs); 
    }else { 
     return errorResponse(400, "The document was not found."); 
    } 
    } 

    if (!run) { 
     return errorResponse(400, "The document could not be deleted."); 
    } 

    function deleteDoc(document) { 
    var docDeleted = collection.deleteDocument(document._self, function(err, result){ 
     if (err){ 
      return errorResponse(400, err.message); 
     } 
     response.setBody(result); 
    }); 

    if (!docDeleted) { 
     return errorResponse(400, "The document could not be deleted."); 
    } 
    }; 

    function errorResponse(code,message){ 
    var errorObj = {}; 
    errorObj.code = code; 
    errorObj.message = message; 
    errorObj.date = getDateTime(); 
    return response.setBody(errorObj); 
    } 

    function getDateTime(){ 
    var currentdate = new Date(); 
    var dateTime = currentdate.getFullYear() + "-" +(currentdate.getMonth()+1)+ "-" +  currentdate.getDate()+ " " +currentdate.getHours()+":"+currentdate.getMinutes()+":"+currentdate.getSeconds(); 
     return dateTime; 
    } 
} 

有了,你還需要啓用分區執行(<,>,<=,>=,!=)

這樣試試: This

也在裏面custom具有以下JSON

{ 
    "indexingMode": "consistent", 
    "automatic": true, 
    "includedPaths": [ 
    { 
     "path": "/*", 
     "indexes": [ 
     { 
      "kind": "Range", 
      "dataType": "String", 
      "precision": -1 
     }, 
     { 
      "kind": "Range", 
      "dataType": "Number", 
      "precision": -1 
     }, 
     { 
      "kind": "Spatial", 
      "dataType": "Point" 
     }, 
     { 
      "kind": "Spatial", 
      "dataType": "Polygon" 
     } 
     ] 
    } 
    ], 
    "excludedPaths": [] 
} 

謝謝