在dynamoDB查询中使用OR条件

时间:2017-03-02 11:26:45

标签: node.js amazon-dynamodb nosql

我想根据列status_code查询dynamoDB表。我使用以下代码获取输出:

params = {
    TableName : "Orders_" + environment,
    IndexName: "StatusCode-StoreID-index",
    KeyConditionExpression: "StatusCode = :status_code",
    ExpressionAttributeValues: {
      ":status_code": "ST01"
    },
    ScanIndexForward: false,
    Limit : ordersPageSize
  };

这里我将status_code作为ST01传递。我的问题是传递多个值而不是ST01。 如何获取status_code值为ST01或ST02或ST03的记录?

2 个答案:

答案 0 :(得分:0)

您可以在IN上使用 FilterExpression 运算符。

params = {
    TableName : "Orders_" + environment,
    IndexName: "StatusCode-StoreID-index",
    KeyConditionExpression: "StatusCode = :status_code1",
    ExpressionAttributeValues: {
      ":status_code1": "ST01"
    },
    ScanIndexForward: false,
    Limit : ordersPageSize
  };

如果您想获得多种状态(即哈希键),可以使用batchGetItem API。但是,batchGetItem不支持索引。您只能在主表上使用此API。

答案 1 :(得分:0)

根据DynamoDB Query Documentation

  

排序键条件的有效比较如下:

     
      
  • sortKeyName =:sortkeyval - 如果排序键值等于:sortkeyval,则为true。
  •   
  • sortKeyName< :sortkeyval - 如果排序键值小于:sortkeyval。
  • ,则为true   
  • sortKeyName< =:sortkeyval - 如果排序键值小于或等于,则为true:sortkeyval。
  •   
  • sortKeyName> :sortkeyval - 如果排序键值大于:sortkeyval。
  • ,则为true   
  • sortKeyName> =:sortkeyval - 如果排序键值大于或等于:sortkeyval,则为true。
  •   
  • sortKeyName BETWEEN:sortkeyval1 AND:sortkeyval2 - 如果排序键值大于或等于:sortkeyval1且小于   或等于:sortkeyval2。
  •   
  • starts_with(sortKeyName,:sortkeyval) - 如果排序键值以特定操作数开头,则为true。 (你不能使用这个功能   使用Number类型的排序键。)
  •   
     

注意,函数名称starts_with区分大小写。

因此,范围仅支持 AND 没有IN 。您也可以尝试使用 starts_with

您的方案可以转换为以下代码:

params = {
    TableName : "Orders_" + environment,
    IndexName: "StatusCode-StoreID-index",
    KeyConditionExpression: "begins_with(StatusCode, :status_code)",
    ExpressionAttributeValues: {
      ":status_code": "ST0"
    },
    ScanIndexForward: false,
    Limit : ordersPageSize
};

我希望这会有所帮助。