gpt4 book ai didi

node.js - 如何使用 AWS Lambda 按名称查询 dynamoDB 表

转载 作者:搜寻专家 更新时间:2023-10-31 23:34:34 25 4
gpt4 key购买 nike

我有 dynamoDB 表,

表名xx

主分区键id(数字)

主排序键名称(字符串)

我想通过name查询它。

'use strict';
const AWS = require("aws-sdk");
const dynamodb = new AWS.DynamoDB();
const docClient = new AWS.DynamoDB.DocumentClient();

exports.handler = function(event, ctx, callback) {

var params = {
TableName: 'xx',

KeyConditionExpression: "#name = :name",
ExpressionAttributeNames:{
"#name": "name"
},
ExpressionAttributeValues: {
":name":event.name
}
};

docClient.query(params, function(err, data){
if(err){
callback(err, null);
}else{
callback(null, data);
}
});
}

但我收到一个错误,名为:“查询条件缺少关键模式元素:id:”如何处理?

最佳答案

DynamoDB 是一个 NoSQL 数据库,因此默认情况下您只能查询主键。您有几个选择:

  • 创建全局二级索引并针对该索引进行查询 (Link):

    "A global secondary index contains a selection of attributes from the base table, but they are organized by a primary key that is different from that of the table. The index key does not need to have any of the key attributes from the table; it doesn't even need to have the same key schema as a table."

  • 扫描而不是查询:

    var params=  {
    TableName:'xx',
    ProjectionExpression:'name', // remove this string if you want to get not only 'name'
    FilterExpression:'name = :name',
    ExpressionAttributeValues:{ ":name" : event.name }
    };

    docClient.scan(params, function(err, data){
    if(err){
    callback(err, null);
    }else{
    callback(null, data);
    }
    });

如果您的表格不会很大,扫描是更简单、更便宜的方法(我相信全局二级指数有相关成本),但“正确”的方法是使用全局二级指数。

关于node.js - 如何使用 AWS Lambda 按名称查询 dynamoDB 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43241051/

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