1

我有三个条件条件类似的条件。我已经在 dynamo db 表中指定了索引。如果这是一种好习惯或任何其他基于表达式的查询方式,我需要一种指定所有三个索引的方式。

另外我想知道表达式是否有效。

{    
"version" : "2017-02-28",
"operation" : "Query",
"query" : {
    ## Also not sure about the query expression. Is it valid ?
    "expression": "studentId = :studentId and (chapterId = :chapterId isUserAudio = :isUserAudio)",
    "expressionValues" : {
        ":studentId" : {
            "S" : "${ctx.args.studentId}"
        },
        ":chapterId": {
            "S": "${ctx.args.chapterId}"
        },
          ":isUserAudio": {
            "BOOL": "${ctx.args.isUserAudio}"
        }
    }
},
"index": "" # can multiple indexes be specified here
}
4

2 回答 2

2

我相信您应该能够结合使用查询表达式和过滤表达式来实现您的目标。尝试将您的解析器更改为:

{    
"version" : "2017-02-28",
"operation" : "Query",
"query" : {
    "expression": "studentId = :studentId",
    "expressionValues" : {
        ":studentId" : {
            "S" : "${ctx.args.studentId}"
        }
    }
},
"filter" : {
    "expression": "chapterId = :chapterId AND isUserAudio = :isUserAudio",
    "expressionValues" : {
        ":chapterId": {
            "S": "${ctx.args.chapterId}"
        },
          ":isUserAudio": {
            "BOOL": "${ctx.args.isUserAudio}"
        }
    }
},
"index": "the-index-with-studentId-as-a-hashkey"
}

这将首先查询索引,然后使用索引的结果将过滤器应用于值。让我知道这是否有效!

希望这可以帮助

于 2018-05-22T00:28:16.317 回答
1
  • 一次只能查询一个表或一个索引。不可能执行一个访问多个表或索引的查询。您将需要分别查询每个索引并在应用程序中组合数据。
  • DynamoDB 比较器指南在这里。表达式无效。也许你想要:

studentId = :studentId AND chapterId = :chapterId AND isUserAudio = :isUserAudio
于 2018-05-17T08:35:44.887 回答