La Fonction de numérisation en DynamoDB avec le mot clé réservé comme FilterExpression NodeJS
Ma fonction scan :
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) { ...........}
D'erreur à l'exécution :
{ [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 }
Maintenant, je ne obtenez le point que je essaie d'utiliser un mot clé réservé dans th
e filterExpression ce qui est illégal.
Mais si j'exécute la même fonction via aws gui, il renvoie les données magnifiquement (vérification de l'image pour les détails):
La fonction de numérisation sur l'état via l'interface graphique
Donc la question est comment puis-je ajouter de l'expression de filtre par nœud, sans avoir à changer le nom de la clé ???
OriginalL'auteur Saleem Ahmed | 2016-04-18
Vous devez vous connecter pour publier un commentaire.
Résolu :
Il y a deux paramètres à prendre par aws sdk :
Expression De L'Attribut Nom
Expression De La Valeur De L'Attribut
à la fois de fournir la fonctionnalité de remplacement des espaces réservés utilisés dans la liste des attributs.
Ici par Attributs, c'est un peu ambigu, où je me suis confus.
Les assistants de cours à aws signifie à la fois la clé et la valeur quand ils utilisent le terme d'attribut.
Donc, dans le cas où vous souhaitez utiliser un réservés mot-clé comme un attribut de clé d'utiliser l'Expression de l'Attribut de Nom de paramètre avec la touche #(livre) pour désigner l'espace réservé.
De même si vous souhaitez utiliser des espaces réservés pour la valeur de l'attribut d'utiliser l'Expression de la Valeur de l'Attribut parameter :(deux-points) pour désigner l'espace réservé.
Donc finalement mon code (de travail) ressemble à ceci :
Yay. Les amazones de la Documentation est tellement génial que vous connaissez. Si cela leur guide principal pour DynamoDB : Dev Guide des Dernières Amazon dynamodb @kometen
OriginalL'auteur Saleem Ahmed
:status
est un espace réservé dans votre expression que vous n'avez pas à fournir une valeur pour. Voir comment vous vous en fournir des valeurs pour les autres espaces réservés ici:Vous devez faire la même chose pour le
:status
espace réservé. Je ne vois rien à propos d'un mot réservé dans le message d'erreur, donc je ne sais pas pourquoi vous pensez que c'est la cause de l'erreur. L'erreur très précise que vous n'êtes pas fournir une valeur pour le:status
espace réservé.Vous devez utiliser l'espace réservé de la syntaxe, comme dans le texte de la question, mais alors vous devez également fournir la valeur de l'espace réservé:
expressionAttr[":status"] = "status"
Ce n'est pas pour correspondre à la condition de s'accoupler. Aucune valeur n'est renvoyée. Si j'ai des valeurs dans la base de données, comme indiqué sur l'image. Aws doc a dit d'utiliser # pour l'expression des noms d'attributs et : pour l'expression des valeurs d'attribut.
Ensuite, utilisez
#
et voir si cela fonctionne? Le fait est que vous devez fournir une valeur pour tous les espaces réservés que vous mettez dans la requête, qui est ce que le message d'erreur est de se plaindre.OriginalL'auteur Mark B