Amazon web services 使用Node.js查询DynamoDB中的多对多

Amazon web services 使用Node.js查询DynamoDB中的多对多,amazon-web-services,amazon-dynamodb,dynamodb-queries,Amazon Web Services,Amazon Dynamodb,Dynamodb Queries,我从这篇文章中了解了如何在DynamoDB中建模多对多关系: 假设要求显示给定发票的所有账单的列表。但是您需要显示每个票据的所有属性(图像中的红色圆圈) 我可以查询发票-92551的所有账单,如下所示: var params = { TableName: "some-table", KeyConditionExpression: "#pk = :pk", ExpressionAttributeNames: { "#pk":"

我从这篇文章中了解了如何在DynamoDB中建模多对多关系:

假设要求显示给定发票的所有账单的列表。但是您需要显示每个票据的所有属性(图像中的红色圆圈)

我可以查询发票-92551的所有账单,如下所示:

    var params = {
       TableName: "some-table",
       KeyConditionExpression: "#pk = :pk",
       ExpressionAttributeNames: {
          "#pk":"pk",
       },
       ExpressionAttributeValues: {
          ":pk": "Invoice-92551"
       },
       ProjectionExpression: "pk, sk, isPaid, Amount, created...etc"
    }; 

docClient.query(params, function(error, billsForGivenInvoice) {...});
好的,我现在有账单了,但是我需要每个账单的更多属性。我可以做到以下几点:

            var params = {
                RequestItems: {
                    "some-table": {
                        Keys: ["Bill-4224663", "Bill-4224687"],
                        ProjectionExpression: "...other attributes needed..."
                    }
                }
            };

            docClient.batchGet(params, function(error, bills) {});

是否可以一次查询两个结果?。而不是先调用query()并调用batchGet()。

是否尝试从不同的表中获取数据?如果是,在dynamodb中就不可能实现这一点,因为没有连接的概念。通过应用邻接列表设计模式来表示多对多关系的一个表。我相信邻接列表模式会让您创建一个全局二级索引,该索引具有相同的分区键,但使用排序键来定义从账单到发票的关系(换句话说,与您目前所表达的关系相反)。然后,您将使用该索引查找与发票相关的所有票据,并可以获得这些票据的所有属性。