首页 > 解决方案 > DynamoDB FilterExpressions 与 BETWEEN

问题描述

我正在对我的 DynamoDB 表执行扫描操作,然后过滤结果以在 NODE.js 中的两个日期之间包含项目

DynamoDB 表的数据格式如下:

{
      TableName: tableName,
      Item: {
      "visitorID": visitorIDq, // Primary Key
      "dateID":   dateTime, // What I am filtering the scan for
      "visitorName": "END OF Q",
      "employeeName": "END OF Q",
      "comments":  "END OF Q"
}

当前代码:

var date1 = String(threeMonths); // milliseconds since epoch - 3 months in milliseconds 
var date2 = String(dateTime); // milliseconds since epoch aka now
var params2 = {
    TableName: tableName,
    FilterExpression: "dateID BETWEEN :date1 and :date2",
    ExpressionAttributeValues: {
    ":date1": { "S": date1},
    ":date2": { "S": date2}
            }
};

我收到此错误:

错误无法扫描表。错误 JSON:{“消息”:“无效的 FilterExpression:运算符或函数的操作数类型不正确;运算符或函数:BETWEEN,操作数类型:M”,“代码”:“ValidationException”,“时间”:“2019-07-06T02 :00:44.569Z",
"requestId": "REQUESTID1294743204701HHH443", "statusCode": 400,
"retryable": false, "retryDelay": 26.7865000058784 }

经过一些互联网搜索后,我有点卡住了,在 node.js 中并没有真正找到其他有这个问题的人。有任何想法吗?

出于某种原因,堆栈溢出告诉我这主要是代码。我认为我在解释和提供细节方面做得很好。这是占位符文本,因为我正在尝试发布。它仍在发生。细节。细节。细节。

标签: node.jsamazon-dynamodb

解决方案


正确的分辨率:

var dateID = String("\""+ threeMonths + "\""); // var for time in milliseconds, stringifying
var params2 = {
  ExpressionAttributeValues: {
    ':msID' : dateID
  },
  FilterExpression: "dateID >= :msID", // dateID column in DDB is greater than epoch - 3 months
  TableName: "Visitor"
};

JSON.stringify(params2); //params are stringified here for the scan

具体来说:


ExpressionAttributeValues: {
    ':msID' : "15666767546459" // or whatever value you are comparing, the above resolution has dateID there because its a var getting current time
  }


推荐阅读