

DynamoDBに `090--`, `080--` のような電話番号が登録されております。

下記のコードでは電話番号の完全一致は実現可能ですが、「090」「080」のみの部分一致でもDynamoDBから電話番号を取得する場合、どのようなコードを追加すれば実現可能でしょうか？

AmazonConnectの「問い合わせ属性を確認するブロック」では、result が true かどうかを条件に分岐しています。  
Lambdaのコードでは、true(Boolean) で返していますが、問い合わせフローに戻った時点ではstringとして処理されています。  
「問い合わせ属性を確認するブロック」でresult が 「090」「080」の部分一致の場合でも分岐させたいです。

部分一致では `return (item.PhoneNumber in phone);`
を追記すれば良さそうなのですが、下記コードを追記しただけでは処理してくれませんでした。  
「in」の追記以外にも何か追記するのでしょうか？

[![DynamoDBの画像](https://i.stack.imgur.com/2qv5j.jpg)](https://i.stack.imgur.com/2qv5j.jpg)

[code]

    const AWS = require("aws-sdk");
    const DynamoDB = new AWS.DynamoDB.DocumentClient({ region: "ap-southeast-2" });
    const tableName = 'PhoneNumberTable';
    
    exports.handler = async (event) => {
        // 発信者番号
        const phone = event.Details.ContactData.CustomerEndpoint.Address;
        // DynamoDBの一覧取得
        const db = await DynamoDB.scan({TableName: tableName}).promise();
        // 発信者番号が一覧に存在するかどうかの確認
        const result = db.Items.some( item => {
            return (item.PhoneNumber == phone);
            return (item.PhoneNumber in phone); // 追記箇所
        });
        return { result : result };
    };
    
[/code]


CC BY-SA 4.0
2023-06-14T08:59:41.970
95232
2023-06-22T07:00:49.190
2023-06-22T07:00:49.190
3060
55460
question
javascript aws node.js aws-lambda amazon-dynamodb
DynamoDBで部分一致させるには？


DynamoDB の Query では key condition expression や filter expression
が利用できます。`PhoneNumber` アトリビュートが primary key なのかどうかでどちらを利用するかが変わります。

どちらの expression も利用できる演算子はそう多くないですが、幸運にも `begins_with` はどちらでも利用できます。今回は「`080-`
から始まる」と「`090-` から始まる」が使えるでしょう。

それぞれの expression の意味と具体的な実装については以下のドキュメントを参考にしてください：

  * <https://docs.aws.amazon.com/ja_jp/amazondynamodb/latest/developerguide/Query.html>
  * <https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB.html#scan-property>


CC BY-SA 4.0
2023-06-14T11:19:03.450
95233
2023-06-22T06:58:04.843
2023-06-22T06:58:04.843
19110
19110
95232
answer