2017-12-11 9 views
1

私は範囲キー(email、hashedPassword)を持つグローバルセカンダリインデックスを持つdynamodbテーブルを持っています。GSIの条件でdynamodbのアイテムを保存する方法は?

ConditionExpression: "#email <> :email", 
ExpressionAttributeNames: {"#email": "email"}, 
ExpressionAttributeValues: {":email": userInfo.email} 

成功せず: は私がattribute_not_existsを使用しますが、それは私も使用し、動作しません 、メールが重複していない場合はアイテムを保存します。

誰でも助けてください、

ありがとうございます。

+0

(お持ちの場合は、ハッシュキーとソートキー)あなたの主キーとは何ですか? – Stu

+0

@Stu hashKeyは "Id" – Smartoop

答えて

1

DynamoDBの条件式は、アイテム全体ではなく、動作しているアイテムでのみ機能します。

つまり、条件式は他の項目に対して評価されません。

たとえば、新しい項目を作成している場合、一意制約として主キー(Partition + Sort Keyがある場合)を使用する場合にのみ、電子メール制約を適用できます。

あなたが持っているいくつかのオプション:

  • は、挿入する前に、読み取りを実行します。これは電子メールの一意性を保証するものではありませんが、重複したものを多く捕捉する必要があります。
  • 電子メールを主キーとして使用します。
  • は、作成

HTHをロールバックされ、挿入後に一貫した読み取りを実行し

+0

私は最初のオプションを使用しましたが、 "これは電子メールの一意性を保証するものではありませんが、重複するものはたくさんあるはずです"どのようにこれは可能ですか? – Smartoop

+1

同じメールアドレスの2つのインサートが同時に発生している場合、両方とも一致する既存のメールが見つからず、両方が挿入されます。 –

関連する問題