javascript - 如何根据条件从 COSMOS DB 中选择记录

标签 javascript sql azure-cosmosdb

我在 Azure Cosmos DB 中有一个文档。

它包含:

{ “id”:“58d56db3b3f730153cab383c”, "事件日期": "2017-02-11T19:04:18Z", ... ... }

我需要选择仅超过 3 天的文档。

为此我写了: //示例存储过程

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

我该怎么做才能修复它?

最佳答案

我认为您想更改 select 语句以使用 .toISOString() 函数,如下所示:

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

当前的 select 语句正在将字符串属性与 Date() 对象进行比较。

另外,我认为你想更改这一行:

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

对此:

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

关于javascript - 如何根据条件从 COSMOS DB 中选择记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44343260/

相关文章:

sql - 为什么 SQL 会截断我的数据?

php - 从数据库中读取单个值并将其保存在变量中

php - 表关系问题 - 从第二个表收集信息

azure - 错误 - x-ms-partitionkey header 中提供的分区键的组件少于集合中定义的组件

javascript - 如何将子元素附加到悬停元素?

javascript - Bootstrap - 直接链接到模态窗口

javascript - 在 ASP.net 中从服务器端调用带有参数的客户端 JavaScript

c# - DocumentDB 属性绑定(bind)如何响应节流?

azure-cosmosdb - 带有 Linq 的 DocumentDB IN 关键字

javascript - react : How to show Spinner & Component (at the same time) when State Changes using `useEffect`