2017-06-03 6 views
1

Ich habe ein Dokument in Azure Cosmos DB. EnthältSo wählen Sie Datensatz aus COSMOS DB abhängig von Bedingung

Sein:

{ "id": "58d56db3b3f730153cab383c", "activityDate": "2017-02-11T19:04:18Z", ... ... }

ich eine Anforderung haben, das Dokument zu wählen, die älter als 3 Tage nur.

für das ich geschrieben habe: // SAMPLE Stored Procedure

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

var targetDate = new Date(); 

targetDate.setDate(targetDate.getDate() - 3); 
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){ 
     for(var i =0;i<docs.length;i++){ 
     deleteDoc(docs[i]); 
     } 
    }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; 
    } 
} 

Was kann ich es reparieren lassen?

+1

Was meinen Sie, die Art der 'activityDate' ist' var'? Das ist kein Typ. Wie sieht die Datumseigenschaft in Ihren Dokumenten aus? Speichern Sie als Epoche? Als formatierte Zeichenfolge? Und was symbolisiert 'targetDate'? –

Antwort

1

Ich glaube, Sie wollen die Select-Anweisung ändern, um die .toISOString() Funktion wie folgt aussehen verwenden:

var query = 'SELECT * FROM activities a WHERE a.activityDate < "' + targetDate.toISOString()+ '"'; 

Sie aktuelle select-Anweisung wird eine String-Eigenschaft auf ein Date() Objekt zu vergleichen.

Auch ich glaube, Sie wollen diese Zeile ändern:

targetDate.setDate(targetDate.getDate() - 3); 

dazu:

targetDate.setDate(targetDate.getDate() - numberOfDays); 
Verwandte Themen