[解決済み] DynamoDBで予約キーワードをFilterExpressionとしたスキャン関数 NodeJS
2022-02-15 03:25:30
質問
私のスキャン機能 :
var tableName = 'faasos_orders',
filterExp = 'status = :delivered OR status = :void OR status = :bad',
projectionValues = '',
expressionAttr = {};
expressionAttr[":delivered"] = "delivered";
expressionAttr[":bad"] = "bad";
expressionAttr[":void"] = "void";
limit = 10;
dynamoConnector.getItemUsingScan(tableName, filterExp, projectionValues, expressionAttr, function (err, data) { ...........}
実行時のエラー :
{ [ValidationException: Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: status]
message: 'Invalid FilterExpression: Attribute name is a reserved keyword; reserved keyword: status',
code: 'ValidationException',
time: Mon Apr 18 2016 21:57:30 GMT+0530 (IST),
requestId: 'AV6QFHM7SPQT1QR3D4OO81ED4FVV4KQNSO5AEMVJF66Q9ASUAAJG',
statusCode: 400,
retryable: false,
retryDelay: 0 }
今、私は、予約されたキーワードを使用しようとしている点を理解します。 を使用した場合、不正なフィルター式になります。 しかし、同じ関数をaws guiで実行すると、見事にデータが返ってきます(詳細は画像をご確認ください)。 GUIによるステータスのスキャン機能
そこで質問ですが、キー名を変更することなく、ノードを通してフィルター式を追加するにはどうすればよいのでしょうか?
解決方法は?
解決済みです。
aws-sdkが受け取るパラメータは2つあります。
式属性名
式属性の値
は、どちらも属性リストで使用されているプレースホルダーを置き換える機能を提供します。 ここで、Attributesというのは少し曖昧で、私が混乱したところです。 awsのウィザードたちは、属性という言葉を使うとき、キーと値の両方を意味しています。
そのため、予約されたキーワードをキー属性として使用したい場合は、Expression Attribute Name パラメータに #(pound) を付けてプレースホルダーを表します。
同様に、値属性にプレースホルダーを使用したい場合は、Expression Attribute Valueパラメータに:(コロン)を付けてプレースホルダーを表します。
というわけで、最終的に私のコード(動作中)は次のようになります。
var param = {
TableName: "faasos_orders",
FilterExpression: "#order_status = :delivered OR #order_status = :void OR #order_status = :bad",
ExpressionAttributeValues: {
":delivered": "delivered",
":void": "void",
":bad": "bad"
},
ExpressionAttributeNames: {
"#order_status": "status"
}
};
dynamodb.scan(param, function (err, data) {....});
関連
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】最大呼び出しスタックサイズ超過エラーとその修正方法とは?
-
[解決済み] エラー。モジュールhtmlが見つからない
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】FirefoxでGoogle Maps V3をリモートで使用すると「googleが定義されていません」と表示される。
-
[解決済み】 \u003C とは何ですか?
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み] .css()関数で追加したスタイルを削除するにはどうしたらいいですか?
-
[解決済み】eslint: error Parsing error: キーワード 'const' は予約されています。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】TypeError: $(...).DataTable は関数ではありません。
-
[解決済み】JavaScriptのisset()に相当するもの
-
[解決済み】Uncaught ReferenceError。Reactが定義されていない
-
[解決済み】Kendo Observable Bindingと併用する場合、Kendo Switch Labelsを変更することは可能ですか?[Kendo-UI]です。
-
[解決済み】Vueのテンプレートまたはレンダー関数が定義されていない 私はどちらも使っていないのですが?
-
[解決済み】PhantomJS 2.1.1を使用してReactJSアプリケーションをレンダリングできない理由とは?
-
[解決済み】SyntaxError: 期待された式が、'<'を得た。
-
[解決済み】 \u003C とは何ですか?
-
[解決済み】未定義のプロパティ 'forEach' を読み取ることができない
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー