javascript - 如何使用排序键中的任何值查询 DynamoDB?

标签 javascript node.js amazon-web-services amazon-dynamodb

我有一个简单的表,其中包含 userId、pictureURL 和一些其他字段。 我想返回具有特定 userId 的所有字段,但是当我这样做时

dynamodb.get({
  TableName: tableName,
  Key: {
    'userid': '39e1f6cb-22af-4f8c-adf5-xxxxxxxxxx'
  }
}, ...

我得到 The provided key element does not match the schema 因为它似乎还需要排序键。当我做的时候

dynamodb.get({
  TableName: tableName,
  Key: {
    'userid': '39e1f6cb-22af-4f8c-adf5-xxxxxxxxxx',
    'pictureurl': '' // Or null
  }
}, ...

我收到错误消息一个或多个参数值无效:AttributeValue 不能包含空字符串

那么如何查询排序键中的任何值?

最佳答案

使用 DynamoDB DocumentClient :

  • 要查询多个项目,您可以使用 query
  • 要获取单个项目,请使用 get

因此,使用查询并使用KeyConditionExpression 参数为分区键提供特定值。查询操作将返回表(或索引)中具有该分区键值的所有项目。

这是一个例子:

const AWS = require("aws-sdk");
AWS.config.update({region: 'us-east-1'});

const params = {
  TableName: tableName,
  KeyConditionExpression: '#userid = :userid',
  ExpressionAttributeNames: {
    '#userid': 'userid',
  },
  ExpressionAttributeValues: {
    ':userid': '39e1f6cb-22af-4f8c-adf5-xxxxxxxxxx',
  },
};

const dc = new AWS.DynamoDB.DocumentClient();

dc.query(params, (err, data) => {
  if (err) {
    console.log('Error', err);
  } else {
    for (const item of data.Items) {
      console.log('item:', item);
    };
  }
});

关于javascript - 如何使用排序键中的任何值查询 DynamoDB?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57008908/

相关文章:

javascript - 如何理解 `Zero-fill right shift` (`>>>` ) 在 `d3.bisector` 源代码中?

javascript - 什么会阻止 sailsjs 识别 req.params ?

node.js - 如何在 github 操作工作流 ci 中通过 npm 安装私有(private) github 存储库

java - 仅过去 N 天的 DynamoDB 计数器字段统计信息

c# - Uncaught ReferenceError :False is not defined

javascript - nodejs - 将客户端时间戳存储在数据库中

javascript - Ember select - 在页面加载良好时调用选择事件

Node.js 依赖项作为单例

java - 如何让两个域名指向同一个Web应用程序并显示不同的内容?

ruby-on-rails - 使用 AWS Cloudfront 异步加载 Google map