node.js - 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 中并没有真正找到其他有这个问题的人。有任何想法吗?
出于某种原因,堆栈溢出告诉我这主要是代码。我认为我在解释和提供细节方面做得很好。这是占位符文本,因为我正在尝试发布。它仍在发生。细节。细节。细节。
解决方案
正确的分辨率:
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
}
推荐阅读
- windows - 如何使用 Powershell 检查操作系统架构(32 位或 64 位)?
- moodle - 由于没有此类活动,因此无法在 Moodle 中创建考勤
- java - 使用tomcat9 + Memcache时,会话之间的HttpSession对象变为空
- spring - DatastoreException:给定的键没有字符串名称值,但尝试转换为字符串
- sql - 当 dblink 失败时,使用 UNION 的视图无法返回查询的第一部分的结果
- python - 用于 systemd 服务的 Python ImportError
- c# - 如何使用c#在txt文件的每一行中设置前缀和删除字符后
- javascript - forloop 麻烦,未定义的问题
- if-statement - If/Then 语句写入,用于从另一个单元格中提取空白单元格
- python - 使用跨度对象。[斯帕西,蟒蛇]