Как использовать несколько глобальных вторичных индексов для запроса синхронизации приложения? - PullRequest
0 голосов
/ 17 мая 2018

У меня есть три условия условия, где как условие. Я указал там индексы в таблице динамо-базы данных. Мне требуется способ указать все три индекса, если это хорошая практика или любой другой способ запроса на основе выражения.

Также я хочу знать, является ли выражение допустимым или нет.

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

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я полагаю, что вы должны иметь возможность использовать комбинацию выражений запросов и выражений фильтров для достижения своей цели.Попробуйте изменить свой резольвер на это:

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

Сначала будет выполнен запрос к индексу, а затем с результатами из индекса будет применен фильтр к значениям.Дайте мне знать, если это работает!

Надеюсь, это поможет

0 голосов
/ 17 мая 2018
  • Вы можете только Запросить одну таблицу или один индекс за один раз. Невозможно выполнить один запрос, который обращается к более чем одной таблице или индексу. Вам нужно будет запрашивать каждый индекс отдельно и объединять данные в вашем приложении.
  • Руководство по компаратору DynamoDB здесь . Выражение недопустимо. Может быть, вы хотите:

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