2017-02-13 8 views
0

Я использую AWS DynamoDB DocumentClient для запросов к моим таблицам DynamoDB. В моих таблицах у меня есть свойство, называемое «_id», которое содержит уникальный идентификатор для каждой записи. Когда я пытаюсь выполнить запрос на запись на основе этого идентификатора, я получаю сообщение об ошибке «Неверное выражение KeyConditionExpression: ошибка синтаксиса: токен: \" _ \ ", рядом: \" _ id \ "". Код, который делает этот запрос, приведен ниже.DynamoDB - Почему я не могу использовать «_» в качестве префикса в выражении ключевого условия?

function findById(id) { 

    //Build query 
    var params = {}; 
    params.TableName = "recordDev"; 
    params.IndexName = "_id"; 
    params.KeyConditionExpression = '_id = :id'; 
    params.ExpressionAttributeValues = { 
     ':id': id 
    }; 

    return DynamoDB 
     .query(params).promise() 
     .then(function(records) { 
      return records.Items[0]; 
     }) 
     .catch(function(error) { 
      return Promise.reject(error); 
     }); 
    }; 

Есть ли что-то, что мне не хватает в отношении использования знака «_» при построении параметров запроса для DynamoDB? Я попытался оглянуться на подобные ошибки, но не смог найти ни одного, подобного моему сценарию.

ответ

2

Можете ли вы попробовать использовать параметр ExpressionAttributeNames?

var params = {}; 
params.TableName = "recordDev"; 
params.IndexName = "_id"; 
params.KeyConditionExpression = '#id = :id'; 
params.ExpressionAttributeValues = { 
    ':id': id 
}; 
params.ExpressionAttributeNames: { 
     "#id":"_id" 
}; 
+0

Это сработало! Есть ли причина, по которой вы знаете, почему она не просто автоматически работает без использования ExpressionAttributeNames для вещей с «_»? – tbergen1

+0

Действительно не знаю. Скорее всего, это связано с их механизмом синтаксического анализа. Я думаю, что в случае простых имен он может работать без указания ExpressionAttributeNames, но не совсем уверен. – gkatzioura