尝试将范围键与提供的日期范围进行比较时,ConditionExpression失败

时间:2019-04-16 14:56:00

标签: javascript amazon-dynamodb documentclient

我在dynamodb中有一个表,其中带有deviceKey的哈希键和timestamp的范围键。 deviceKeys的格式为“ randomstring-num”,例如,我可能具有“ abc-1”,其中字符串是IoT设备ID,数字是事件序列。由于我们的物联网设置,我们可以获得重复的消息,这些消息看起来相同。为避免这些重复,我想避免插入彼此具有10秒内相同deviceKey的项。我尝试执行以下操作,但它似乎总是失败。

const params = {
  TableName: 'test',
  ConditionExpression: 'attribute_not_exists(#ts) and NOT (#ts between 
  :start and :end)

  ExpressionAttributeNames: {
    '#ts': 'timestamp'
  },
  ExpressionAttributeValues: {
   ':start': ts - (10 * 1000),
   ':end': ts + (10 * 1000),
  },
  Item: {
   deviceKey: 'abc-1',
   timestamp: Date.now(),
  }
}

上面的代码总是导致条件失败。看来,无论何时我将日期范围都包括在NOT BETWEEN部分中,它都会失败。我在尝试使用此哈希+范围键配置无法实现的事情吗?

总结一下,如果

hash    range
abc-1   2019-03-08 12:35:36

存在,我不希望在10秒钟之内将具有相同哈希键的任何内容插入到正向或反向,所以

hash    range
abc-1   2019-03-08 12:35:38

应该失败。这些消息大约在同一时间(相距毫秒)传入,因此我不确定在这种情况下在插入之前进行查询是否可行。

0 个答案:

没有答案