Amazon dynamodb 仅使用dynamo DB中的二级索引进行查询

Amazon dynamodb 仅使用dynamo DB中的二级索引进行查询,amazon-dynamodb,Amazon Dynamodb,我可以只在二级索引上使用条件查询dynamodb表吗。我不想保留哈希键的任何条件。有办法吗?没有,要查询DynamoDB,您必须知道哈希键。如果您不知道散列键,则获取数据的唯一方法是全表扫描。否,要查询DynamoDB,您必须知道散列键。如果您不知道散列键,则获取数据的唯一方法是进行全表扫描。从2013年12月起,您可以。Dynamo支持全局二级索引 有关如何执行查询,请参见页面。您基本上必须指定表和索引。如果将所有属性投影到索引上,则可以获取一条记录,或者获取原始哈希键,可以像以前一样在表中查

我可以只在二级索引上使用条件查询dynamodb表吗。我不想保留哈希键的任何条件。有办法吗?

没有,要查询DynamoDB,您必须知道哈希键。如果您不知道散列键,则获取数据的唯一方法是全表扫描。

否,要查询DynamoDB,您必须知道散列键。如果您不知道散列键,则获取数据的唯一方法是进行全表扫描。

从2013年12月起,您可以。Dynamo支持全局二级索引


有关如何执行查询,请参见页面。您基本上必须指定表和索引。如果将所有属性投影到索引上,则可以获取一条记录,或者获取原始哈希键,可以像以前一样在表中查找对象。

截至2013年12月,您可以。Dynamo支持全局二级索引


有关如何执行查询,请参见页面。您基本上必须指定表和索引。如果将所有属性投影到索引上,则可以获取一条记录,或者获取原始散列键,可以像以前一样在表中查找对象。

查询操作
始终需要散列键,即使查询的是或

Query
操作始终需要哈希键,即使您正在查询或

您可以使用辅助索引查询dynamodb

let params = {
       TableName: 'users',
        KeyConditionExpression: "#_id = :_id",
        IndexName: "_id-index",
        ExpressionAttributeNames:{
            "#_id": "_id"
        },
        ExpressionAttributeValues: {
            ":_id":userId
        }
    };
    documentClient.query(params, function (err, data) {
        if (err) {
            callback(err);
        }
        else {
            if (data && data.Items && data.Items[0].accessToken) {
                userData = data.Items[0];
            }
            else userData ={};

            callback(null,{userData:userData})
        }
    })

您可以使用辅助索引查询dynamodb

let params = {
       TableName: 'users',
        KeyConditionExpression: "#_id = :_id",
        IndexName: "_id-index",
        ExpressionAttributeNames:{
            "#_id": "_id"
        },
        ExpressionAttributeValues: {
            ":_id":userId
        }
    };
    documentClient.query(params, function (err, data) {
        if (err) {
            callback(err);
        }
        else {
            if (data && data.Items && data.Items[0].accessToken) {
                userData = data.Items[0];
            }
            else userData ={};

            callback(null,{userData:userData})
        }
    })

TL;DR是,可以基于辅助索引进行查询

let params = {
       TableName: 'users',
        KeyConditionExpression: "#_id = :_id",
        IndexName: "_id-index",
        ExpressionAttributeNames:{
            "#_id": "_id"
        },
        ExpressionAttributeValues: {
            ":_id":userId
        }
    };
    documentClient.query(params, function (err, data) {
        if (err) {
            callback(err);
        }
        else {
            if (data && data.Items && data.Items[0].accessToken) {
                userData = data.Items[0];
            }
            else userData ={};

            callback(null,{userData:userData})
        }
    })
例如:

请考虑具有以下结构的表:

- user_id (partition key)
- created_at (sort key)
- account_id
- api_path
- execution_time
- platform
- ttl
- metadata
如果要基于帐户\ u id进行查询,可以按如下方式创建GSI:

account_id (partition key)
created_at (sort key)
假设您将此索引命名为:account\u id-created\u at-index

现在可以按如下方式查询它们(为了简洁起见,选择python作为语言,这适用于它们的所有SDK):

请注意此处的索引名称参数,它是键


如果有任何项目适用于
KeyConditionExpression
,则可以在
响应['items']
中作为对象列表进行访问。

TL;DR是,可以基于辅助索引进行查询

let params = {
       TableName: 'users',
        KeyConditionExpression: "#_id = :_id",
        IndexName: "_id-index",
        ExpressionAttributeNames:{
            "#_id": "_id"
        },
        ExpressionAttributeValues: {
            ":_id":userId
        }
    };
    documentClient.query(params, function (err, data) {
        if (err) {
            callback(err);
        }
        else {
            if (data && data.Items && data.Items[0].accessToken) {
                userData = data.Items[0];
            }
            else userData ={};

            callback(null,{userData:userData})
        }
    })
例如:

请考虑具有以下结构的表:

- user_id (partition key)
- created_at (sort key)
- account_id
- api_path
- execution_time
- platform
- ttl
- metadata
如果要基于帐户\ u id进行查询,可以按如下方式创建GSI:

account_id (partition key)
created_at (sort key)
假设您将此索引命名为:account\u id-created\u at-index

现在可以按如下方式查询它们(为了简洁起见,选择python作为语言,这适用于它们的所有SDK):

请注意此处的索引名称参数,它是键


如果有任何项应用于
KeyConditionExpression
,则可以在
响应['items']
中作为对象列表进行访问。

是的,您可以仅使用二级索引查询DynamoDb,而无需使用哈希键。。 假设您有DynamoDB表
EmployeeData
,其中包含列EmployeeID、Department和created\u at\u date.。此表的分区键为EmployeeID,排序键为Department。。 您希望根据创建的日期获取数据。因此,首先在DynamoDB表上创建名为
dateindex
的二级索引。。 然后,您可以使用以下代码使用辅助索引获取数据:

from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('EmployeeData')
response = table.query(IndexName="date-index",
    KeyConditionExpression=Key('created_at_date').eq('2020-01-03'))
print(response)

是的,您可以只使用二级索引查询DynamoDb,而不使用任何哈希键。。 假设您有DynamoDB表
EmployeeData
,其中包含列EmployeeID、Department和created\u at\u date.。此表的分区键为EmployeeID,排序键为Department。。 您希望根据创建的日期获取数据。因此,首先在DynamoDB表上创建名为
dateindex
的二级索引。。 然后,您可以使用以下代码使用辅助索引获取数据:

from boto3.dynamodb.conditions import Key
dynamodb = boto3.resource('dynamodb')
table = dynamodb.Table('EmployeeData')
response = table.query(IndexName="date-index",
    KeyConditionExpression=Key('created_at_date').eq('2020-01-03'))
print(response)