2017-02-13 5 views
0

AWS DynamoDB DocumentClientを使用して、DynamoDBテーブルを照会しています。私のテーブルには、各エントリの一意のIDを保持する "_id"というプロパティがあります。この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のためのクエリのparamsを構築するときに「_」を使用してに関して行方不明です何かはありますか?私は似たようなエラーを探してみましたが、私のシナリオのようなものは見つけられませんでした。

答えて

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

関連する問題