2017-06-02 4 views
2

私はコレクションactivitiesそれが2017-02-24T19:04:18Z特定の日には、バック

私は古いものnumberOfDaysをしているこのコレクションからすべてのレコードを削除するなどの日付が含まれているフィールドactivityDateが含まれています。

私はそれが構文的に正しい

ではありませんまたは一部が存在することができるように私は、クエリを実行し、問題に直面しています

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

ような何かをしようとcosmosdbストアドプロシージャ

を書き込むことによって、この作業を行っておりますそれを行う別の方法。

ありがとうございます。

答えて

0

a.activityDatetodayマイナスnumberOfDaysを比較する必要があります。減算を行う最も簡単な方法は、ISO-8601文字列をDateオブジェクトに変換し、1000 * 60 * 60 * 24 * numberOfDaysをそれに加えてDateオブジェクトのメソッドを使用してISO-8601文字列に変換することですJavaScriptではDate.toISOString()ですが、言語は異なる場合があります)。 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": [] 
} 

ありがとう

関連する問題