我正在尝试使用分区键和排序键查询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
答案 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)))