简体   繁体   中英

How to use multiple global secondary indexes for app sync query?

I have three condition terms in where like condition. I have specified there indexes in the dynamo db table. I require a way specify all three indexes if that is a good practice or any other way to query based on the expression.

Also I want to know whether the expression is a valid one or not.

{    
"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
}
  • You can only Query one table or one index at a time. It is not possible to execute one query that accesses more than one table or index. You will need to Query each index separately and combine the data in your application.
  • DynamoDB comparator guide is here . The expression is not valid. Maybe you want:

studentId = :studentId AND chapterId = :chapterId AND isUserAudio = :isUserAudio

I believe you should be able to use a combination of query expressions and filter expressions to achieve your goal. Try changing your resolver to this:

{    
"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"
}

This will initially query the index and then with the results from the index will apply a filter to the values. Let me know if that works!

Hope this helps

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM