在我的網站上,我有一個包含以下欄位的表單:全名、電子郵件、電話號碼和訊息(下圖)。

在有人填寫表單后,我想查詢我的表,看看是否有任何專案與用戶提供給表單的電子郵件地址或電話號碼相同。如果存在具有相同電子郵件/電話號碼的專案,那么我想檢索該專案的“sharedID”,然后使用提交的表單資訊和檢索到的 ID 在表中創建一個新專案。

目前,我正在執行一個 dynamoDB 查詢來實作這一點(下面的代碼)。但是,我相信我需要在查詢中包含主鍵 (id)。但是,這是一個問題,因為在查詢時無法知道專案的 id(因為 id 是隨機生成的)。
const checkForSameEmailOrPhone = () => {
const params = {
TableName: "customers",
ProjectionExpression: "sharedID",
FilterExpression: "email_address = :givenEmail or phone_number = :givenNumber",
ExpressionAttributeValues: {
":givenEmail": "[email protected]",
":givenNumber": '7777777'
}
};
docClient.query(params, function(err, data){
if (err) {
console.error('Error in GetItem', err);
} else {
console.log('data', data);
function createItem() {
const uniqueId = nanoid();
let params = {
TableName :"customers",
ConditionExpression: "attribute_not_exists(z)",
Item:{
"id": uniqueId,
"email_address": "[email protected]",
"full_name": "a name",
"phone_number": "822222222",
"message": "different",
"sharedId": data?.Items[0]?.id || uniqueId
}
};
docClient.put(params, function(err, data) {
if (err) {
console.error('sdk ERROR', err);
} else {
console.log('success');
}
});
};
createItem();
}
});
};
話雖如此,我想知道是否有人可以幫助我找到一種具有成本效益/高效的解決方案來檢索包含用戶在表單上提供的相同電子郵件和電話號碼的專案的 ID。
uj5u.com熱心網友回復:
您應該創建全域二級索引并將要查詢的欄位用作磁區鍵。一個表可以有多個 GSI,最佳實踐是只將必要的欄位添加到索引中(這樣在查詢資料時使用較少的讀取容量單位)。您可以在官方檔案中閱讀有關索引的更多資訊
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/402881.html
標籤:
