使用OR ConditionalOperator扫描具有两个过滤器的DynamoDB同一列



我确信这是一个非常新手的问题,所以我事先道歉,但我找不到任何人这样做的任何例子。

我在表上创建了一个列。我想找到记录在哪里它是空的或在哪里它小于x。我不知道如何运行这个,因为它似乎只评估我的两个条件之一,因为当我把第二个条件在地图上与相同的键为同一列它覆盖了我在地图中的第一个条目。我错过了什么?

         Condition newRunsFilterCondition = new Condition()
    .withComparisonOperator(ComparisonOperator.EQ.toString())
    .withAttributeValueList(new AttributeValue().withN("0"));
    Calendar cal = Calendar.getInstance();
    cal.set(Calendar.HOUR, -1);
     Condition exRunsFilterCondition = new Condition()
    .withComparisonOperator(ComparisonOperator.LT.toString())
    .withAttributeValueList(new AttributeValue().withN("" + cal.getTime().getTime()));
    Map<String, Condition> conditions = new HashMap<String, Condition>();
    conditions.put("lastrun", newRunsFilterCondition);
    conditions.put("lastrun", exRunsFilterCondition);
    ScanRequest scanRequest = new ScanRequest()
        .withTableName("DataLoaderSchedule")
        .withScanFilter(conditions).withConditionalOperator("OR");
    ScanResult result = client.scan(scanRequest);

我认为DynamoDb目前不支持同一列上的2个过滤器…

conditions.put("lastrun", newRunsFilterCondition);
conditions.put("lastrun", exRunsFilterCondition);

Conditions变量是一个映射,目前单个属性只能映射到单个条件。这就是为什么你不能在一列上有两个条件。

我能想到的解决方法是扫描两次,每次使用不同的过滤器。然后将结果合并到您这边。

相关内容

  • 没有找到相关文章

最新更新