Запрос DynamoDB между определенными датами - NodeJs - PullRequest
0 голосов
/ 09 апреля 2020

Я пытаюсь запросить у Динамо БД для person_id между двумя датами У меня есть ошибки со следующим кодом:

Обратите внимание, что первичный ключ таблицы (event_id), но я не уверен, как / где его использовать?

 

var params = {
        TableName: "tableName",
        IndexName: "person_id-event_date-index",
        FilterExpression: "#person_id =:person_id",
        KeyConditionExpression: "#person_id = :person_id and #event_date BETWEEN :from AND :to",
        ExpressionAttributeNames: {
            "#person_id": "person_id",
            "#event_date": "event_date"
        },
        ExpressionAttributeValues: {
            ":person_id": person_id,
            ":from": start_date,
            ":to": end_date
        }
    }
documentClient.query(params, function(err, data) {
    if (err) {
        console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
        callback(new Error(JSON.stringify(err)))
    }
    else {
        callback(null, data);
    }
});

    

Может кто-нибудь проверить, как это работает?

Большое спасибо

Ответы [ 2 ]

0 голосов
/ 09 апреля 2020

Вот код исправления:

  

   var params = {
                TableName: "tableName" ,
                IndexName: "person_id-event_date-index",
                KeyConditionExpression: "#person_id = :person_id and #event_date BETWEEN :from AND :to",
                ExpressionAttributeNames: {
                    "#person_id": "person_id",
                    "#event_date": "event_date"
                },
                ExpressionAttributeValues: {
                    ":person_id": person_id,
                    ":from": start_date,
                    ":to": end_date
                }
        }

    documentClient.query(params, function(err, data) {
        if (err) {
            console.error("Unable to query. Error:", JSON.stringify(err, null, 2));
            callback(new Error(JSON.stringify(err)))
        }
        else {
callback(null, data);
        }
    });
  }
0 голосов
/ 09 апреля 2020

Короткий ответ, вы не можете сделать это, если в таблице не настроены некоторые GSI (глобальные вторичные индексы), которые допускают такого рода запросы.

При выполнении запроса вы необходимо передать значение первичного ключа, в противном случае вы не можете выполнить запрос.

Учитывая, что вы хотите выполнять запрос на основе другого столбца, а не первичного ключа, вам нужно проверить, есть ли у вас индекс определяется с помощью

  • PrimaryKey = person_id и
  • RangeKey = event_date

Если такой индекс задан, вы можете положиться на scan но это не рекомендуется

...