gpt4 book ai didi

amazon-dynamodb - 在没有主键的情况下查询 DynamoDB

转载 作者:行者123 更新时间:2023-12-03 20:24:52 26 4
gpt4 key购买 nike

我需要通过与其主键不同的键来查询 DynamoDB 表。我试图为它创建一个全局二级索引。但是我收到此错误:“不支持查询关键条件 dynamodb”。通过查看一些示例,除非我还包含主索引/键,否则我似乎无法通过二级索引进行查询,这是正确的吗?假设我需要查询在某个城市工作的所有员工,我可以在没有员工 ID 的情况下进行查询吗?

更新信息
也许我的索引没有像它应该的那样创建?

表信息:

  • id-->主分区键
  • 主排序键-->名称

  • GSI:
  • 分区键/主键-->城市
  • 投影-->全部

  • 当我从节点查询时,我将城市和索引名称作为参数发送:
        const filter = { city: city};
    return this.getRecordsFromDb(filter, { IndexName: "myIndexName" })
    .then(records => __.head(records));

    最佳答案

    注意:- 由于您没有提供完整的代码,因此很难模拟和识别问题。但是,我创建了类似的表和索引。这对我来说可以。您可以引用以下代码了解更多详情。

    这是表创建脚本和查询索引。

    如果需要,您可以更改表名和索引名。我遵循了您在帖子中提到的相同关键属性结构。

    这已经过测试并且工作正常。

    1) 使用索引 'city_index' 创建表 'city':-

    var params = {
    TableName: 'city',
    KeySchema: [ // The type of of schema. Must start with a HASH type, with an optional second RANGE.
    { // Required HASH type attribute
    AttributeName: 'id',
    KeyType: 'HASH',
    },
    { // Required HASH type attribute
    AttributeName: 'name',
    KeyType: 'RANGE',
    }

    ],
    AttributeDefinitions: [ // The names and types of all primary and index key attributes only
    {
    AttributeName: 'id',
    AttributeType: 'S', // (S | N | B) for string, number, binary
    },
    {
    AttributeName: 'name',
    AttributeType: 'S', // (S | N | B) for string, number, binary
    },
    {
    AttributeName: 'city',
    AttributeType: 'S', // (S | N | B) for string, number, binary
    },

    ],
    ProvisionedThroughput: { // required provisioned throughput for the table
    ReadCapacityUnits: 400,
    WriteCapacityUnits: 400,
    },
    GlobalSecondaryIndexes: [ // optional (list of GlobalSecondaryIndex)
    {
    IndexName: 'city_index',
    KeySchema: [
    { // Required HASH type attribute
    AttributeName: 'city',
    KeyType: 'HASH',
    }
    ],
    Projection: { // attributes to project into the index
    ProjectionType: 'ALL' // (ALL | KEYS_ONLY | INCLUDE)
    },
    ProvisionedThroughput: { // throughput to provision to the index
    ReadCapacityUnits: 400,
    WriteCapacityUnits: 400,
    },
    },
    // ... more global secondary indexes ...
    ],

    };
    dynamodb.createTable(params, function(err, data) {
    if (err){ console.log("error :" +JSON.stringify(err));} // an error occurred
    else console.log("success :" +JSON.stringify(data)); // successful response

    });

    2) 在city表中插入一些数据

    3) 使用索引查询:-
    var docClient = new AWS.DynamoDB.DocumentClient();
    var table = "city";
    var params = {
    TableName : table,
    IndexName : 'city_index',
    KeyConditionExpression : 'city = :cityVal',
    ExpressionAttributeValues : {
    ':cityVal' : 'london'
    }
    };

    docClient.query(params, function(err, data) {
    if (err) {
    console.error("Unable to read item. Error JSON:", JSON.stringify(err,
    null, 2));
    } else {
    console.log("GetItem succeeded:", JSON.stringify(data, null, 2));
    }
    });

    关于amazon-dynamodb - 在没有主键的情况下查询 DynamoDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43352143/

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