Sql 如何从CosmosDB中删除特定日期后的记录
我有一个集合Sql 如何从CosmosDB中删除特定日期后的记录,sql,stored-procedures,azure-cosmosdb,Sql,Stored Procedures,Azure Cosmosdb,我有一个集合activities它包含一个字段activityDate,其中包含类似2017-02-24T19:04:18Z 我想删除此集合中比numberOfDays更早的所有记录 我通过编写cosmosdb存储过程来执行此任务 我试着做些类似的事情 var query = 'SELECT * FROM activities a WHERE a.activityDate > = "' + numberOfDays+ '"'; 我在执行查询时遇到问题,因为它在语法上不正确 或者也可以有其
activities
它包含一个字段activityDate
,其中包含类似2017-02-24T19:04:18Z
我想删除此集合中比numberOfDays
更早的所有记录
我通过编写cosmosdb存储过程来执行此任务
我试着做些类似的事情
var query = 'SELECT * FROM activities a WHERE a.activityDate > = "' + numberOfDays+ '"';
我在执行查询时遇到问题,因为它在语法上不正确
或者也可以有其他的方法
提前谢谢 您需要将
a.activityDate
与today
减去numberOfDays
进行比较。最简单的减法方法是将ISO-8601字符串转换为日期对象,然后向其中添加1000*60*60*24*numberOfDays,然后使用日期对象中的方法将其转换回ISO-8601字符串(Date.toISOString()
在JavaScript中,但您的语言可能不同)。在WHERE子句中可能有一些使用JavaScript表达式的方法,但我不知道。即使有,我也不建议这样做,因为这样做会使查询成为一个完整的表扫描。因此,我建议您在客户端执行此转换和减法操作,以获取要放入查询子句中的标量字符串。以下是解决我问题的方法:
// 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;
}
}
谢谢
{
"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": []
}