如何从特定日期前的 CosmosDB 中删除记录

How to delete the record from CosmosDB specific days back

我有一个集合 activities 它包含一个字段 activityDate,其中包含 2017-02-24T19:04:18Z

这样的日期

我想从该集合中删除所有早于 numberOfDays 的记录。

我正在通过编写 cosmosdb 存储过程来执行此任务

我试试

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

我在执行查询时遇到问题,因为它在语法上不正确

或者可以有其他的方法。

提前致谢。

您需要将 a.activityDatetoday 减去 numberOfDays 进行比较。进行减法的最简单方法是将 ISO-8601 字符串转换为 Date 对象,然后向其添加 1000*60*60*24*numberOfDays,然后使用 Date 对象中的方法将其转换回 ISO-8601 字符串( Date.toISOString() 在 JavaScript 中,但您的语言可能不同)。可能有一些方法可以在 WHERE 子句中使用 JavaScript 表达式,但我不知道。即使有,我也不会推荐它,因为这样做会使查询成为完整的 table 扫描。因此,我建议您在客户端执行此转换和减法操作,以获得要放入查询子句中的标量字符串。

这是我的问题的解决方案:

// 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;
    }
}

你还需要启用分区才能执行(<,>,<=,>=,!=)

所以尝试:

里面还有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": []
}

谢谢