gpt4 book ai didi

amazon-dynamodb - BatchGetItem 或查询 DynamoDb - 按范围查询

转载 作者:行者123 更新时间:2023-12-04 00:40:41 25 4
gpt4 key购买 nike

我有一个名为 User 的表。它有一个用户 ID 的哈希键和一个组织 ID 的范围键。

如何返回所有组织 ID 为“3”的用户

(顺便说一下,这是一个 Lambda 函数)

这段代码给了我一个错误:

console.log('Loading event');
var AWS = require('aws-sdk');
var dynamodb = new AWS.DynamoDB({apiVersion: '2012-08-10'});

exports.handler = function(event, context) {
dynamodb.listTables(function(err, data) {
});

var params = {
"TableName": "PoliceUser",
"Key":
{"User Id" : {"S":event.objectId}, "Organization Id" : {"S": event.organizationId}
},
"ProjectionExpression": "#firstName, #lastName, #longitude, #latitude, #organizationName",
"ExpressionAttributeNames" : {"#firstName": "First Name", "#lastName": "Last Name", "#longitude": "Longitude", "#latitude": "Latitude", "#organizationName": "Organization"},
"ConsistentRead" : true
}

dynamodb.BatchGetItem(params, function(err, data)
{
if (err) {
context.fail('error','Error updating item: '+err);
console.log(err);
}
else
{
// console.log('great success: '+JSON.stringify(data, null, ' '));
console.log(data);
context.succeed( data);
}

// successful response


});
};

最佳答案

DynamoDB 提供了几种查询项目的方法(假设您的表具有哈希键和范围键):

  • 通过哈希键 + 范围键获取单个项目
  • 查询所有项目的特定哈希键
  • 扫描整个表格

使用“User Id”哈希键和“Organization Id”范围键,您只能查询与单个用户关联的所有组织。

听起来你想要相反的,属于一个组织的所有用户。


一种选择是交换您的哈希键和范围键。在您这样做之前,请确保这对您的用例确实有意义。


或者,您可以添加 Global Secondary Index到您的表,其中哈希键是“组织 ID”,范围键是“用户 ID”,同时保留现有的哈希/范围键,因为它们当前存在。然后,您就可以使用该索引返回所有组织 ID 为“3”的用户。

我建议您在创建 GSI 之前先阅读一些 GSI。它们非常有用,但可能很棘手。 GSI 在技术上是数据的物理副本,因此您需要决定要投影哪些列(使用索引时可以读取哪些列)。 GSI 也是异步更新的,因此它们最终是一致的。它们还具有自己预置的读/写吞吐量,理论上可以根据您的访问模式影响您在表上可以实现的最大吞吐量。

关于amazon-dynamodb - BatchGetItem 或查询 DynamoDb - 按范围查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31633141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com