用主键和排序键上的两个条件查询表

时间:2019-06-11 10:39:22

标签: go amazon-dynamodb dynamodb-queries

我正在尝试使用分区键和排序键查询dynamodb表。排序键是一个Unix日期,因此我想在排序的这两个日期之间请求x分区键。目前,我可以通过表扫描来实现此目的,但是为了提高速度,我必须将其移至查询中。我无法在网上找到任何使用分区键和排序键查询其表的人的好例子。

我已经仔细阅读了此https://docs.aws.amazon.com/sdk-for-go/api/service/dynamodb/#DynamoDB.Query,并了解到我的参数必须在KeyConditionExpression中。

我已经阅读了https://github.com/aws/aws-sdk-go/blob/master/service/dynamodb/expression/examples_test.go,并从整体上理解了它。但我只是找不到KeyConditionExpression的语法

我以为是这样的:

keyCond := expression.Key("accountId").
    Equal(expression.Value(accountId)).
    And(expression.Key("sortKey").
    Between(expression.Value(fromDateDec), expression.Value(toDateDec)))

但这会抛出:

  

ValidationException:无效的KeyConditionExpression:运算符或函数的操作数类型错误;运算符或函数:BETWEEN,操作数类型:NULL

1 个答案:

答案 0 :(得分:0)

首先,您需要KeyAnd来组合哈希键和排序键条件。

// example.js
import React from 'react'
import { ThemeProvider } from '@material-ui/styles'
import { makeStyles } from '@material-ui/core/styles';
import theme from 'theme.js'
import Button from '@material-ui/core/Button';

const useStyles = makeStyles(theme => ({
  // Some extra styling if you'd like
  button: {
    margin: theme.spacing(1),
  },
}));


export default function Example() {
  const classes = useStyles();
  return (
    <ThemeProvider theme={theme}>
      <Button className={classes.button}>I'm a button</Button>
    </ThemeProvider>
  )
}

现在,您可以按如下所示用等价条件代替等价条件

// keyCondition represents the key condition where the partition key
// "TeamName" is equal to value "Wildcats" and sort key "Number" is equal
// to value 1
keyCondition := expression.KeyAnd(expression.Key("TeamName").Equal(expression.Value("Wildcats")), expression.Key("Number").Equal(expression.Value(1)))