将ConditionalOperator设置为OR的DynamoDB扫描仍在执行AND

根据API文档,我有以下scan参数:

 var params = { "TableName": "MyTable", "ScanFilter": { "id": { "AttributeValueList": [ { "S": "ID-A" }, { "S": "ID-D" } ], "ComparisonOperator": "IN" }, "facilityName": { "AttributeValueList": [ { "S": "Name A" } ], "ComparisonOperator": "IN" } }, "ConditionalOperator": "OR" }; dynamo.scan(params, function (err, data) { if (err) { console.log(err, err.stack); } else { console.log(JSON.stringify(data, null, 2)); } }); 

无论ConditionalOperator字段中的值如何,扫描总是执行AND 。 我究竟做错了什么?

我期望在OR中看到ID-A,ID-C和ID-D。 我只有ID-D。

如果我做一个普通或扫描,没有ScanFilter设置这是数据:

 { "Count": 4, "ScannedCount": 4, "Items": [ { "facilityName": { "S": "Name B" }, "id": { "S": "ID-A" } }, { "facilityName": { "S": "Name B" }, "id": { "S": "ID-B" } }, { "facilityName": { "S": "Name A" }, "id": { "S": "ID-C" } }, { "facilityName": { "S": "Name A" }, "id": { "S": "ID-D" } } ] } 

我能够使用Java SDK来做你想做的事情:

 public static void test() { ScanRequest scanRequest = new ScanRequest("MyTable"); scanRequest.setConditionalOperator(ConditionalOperator.OR); Map<String, Condition> scanFilter = new HashMap<String, Condition>(); Condition idFilter = new Condition().withComparisonOperator(ComparisonOperator.IN).withAttributeValueList(new AttributeValue("ID-A"), new AttributeValue("ID-D")); Condition facilityNameFilter = new Condition().withComparisonOperator(ComparisonOperator.IN).withAttributeValueList(new AttributeValue("Name A")); scanFilter.put("id", idFilter); scanFilter.put("facilityName", facilityNameFilter); scanRequest.setScanFilter(scanFilter); ScanResult scanResult = dynamo.scan(scanRequest); for(Map<String, AttributeValue> item : scanResult.getItems()) { System.out.println(item); } } 

我不熟悉你正在使用的JS SDK。 但是你的代码似乎没问题。 在查看js 文档时 ,我注意到ConditionalOperator是在2012版本中引入的,并且在2011版本中不可用。

你能证实你使用的是12版本吗?