如何在 documentclient.batchWrite() 中使用复合主键?

Posted

技术标签:

【中文标题】如何在 documentclient.batchWrite() 中使用复合主键?【英文标题】:How do I use a composite primary key with documentclient.batchWrite()? 【发布时间】:2020-12-14 20:55:55 【问题描述】:

我正在尝试在this documentation 之后进行批量删除。它给出了以下示例:

var params = 
  RequestItems:  /* required */
    '<TableName>': [
      
        DeleteRequest: 
          Key:  /* required */
            '<AttributeName>': someValue /* "str" | 10 | true | false | null | [1, "a"] | a: "b" */,
            /* '<AttributeName>': ... */
          
        ,
        PutRequest: 
          Item:  /* required */
            '<AttributeName>': someValue /* "str" | 10 | true | false | null | [1, "a"] | a: "b" */,
            /* '<AttributeName>': ... */
          
        
      ,
      /* more items */
    ],
    /* '<TableName>': ... */
  ,
  ReturnConsumedCapacity: INDEXES | TOTAL | NONE,
  ReturnItemCollectionMetrics: SIZE | NONE
;
documentclient.batchWrite(params, function(err, data) 
  if (err) console.log(err, err.stack); // an error occurred
  else     console.log(data);           // successful response
);
Key — 必需 — (map) — 可序列化的 javascript 对象。有关受支持类型的信息,请参阅DynamoDB Data Model

进一步查看我发现的 DynamoDB 文档this parameter description

Key - 唯一标识项目的主键属性值映射。此映射中的每个条目都由一个属性名称和一个属性值组成。对于每个主键,您必须提供所有键属性。例如,对于简单的主键,您只需为分区键提供一个值。对于复合主键,您必须同时提供分区键和排序键的值。

我的表同时使用分区键和排序键,因此我必须使用复合键。我真的找不到这个请求的外观示例,我尝试按照上面文档中的示例进行操作,但它既不会引发错误,也不会删除所需的项目。

我已尝试使用第一个示例中的以下参数:

const params = 
    "RequestItems": 
        "table-name": [
            
                "DeleteRequest": 
                    "Key": 
                        "partition-key-col-name": "partitionKeyValue",
                        "sort-key-col-name": "sortKeyValue"
                    
                
            ,
            
                "DeleteRequest": 
                    "Key": 
                        "partition-key-col-name": "partitionKeyValue",
                        "sort-key-col-name": "sortKeyValue"
                    
                
            
        ]
    

按照第二个示例中的参数格式进行第二次尝试:

const params = 
    "RequestItems": 
        "table-name": [
            
                "DeleteRequest": 
                    "Key": 
                        "partition-key-col-name": 
                            "S": "partitionKeyValue"
                        ,
                        "sort-key-col-name": 
                            "S": "sortKeyValue"
                        
                    
                
            ,
            
                "DeleteRequest": 
                    "Key": 
                        "partition-key-col-name": 
                            "S": "partitionKeyValue"
                        ,
                        "sort-key-col-name": 
                            "S": "sortKeyValue"
                        
                    
                
            
        ]
    

我刚回来'UnprocessedItems'

 UnprocessedItems:  

我哪里错了?

【问题讨论】:

我相信你会使用documentclient的第一种方法。你是说什么都没有被记录?您的console.log 声明都没有发生?我看到你用 aws-lambda 标记了这个,那么 Lambda 日志中是否有超时消息或其他内容? Lambda 函数是否配置为在 VPC 中运行? 谢谢马克。我从 documentclient.batchWrite 返回 UnprocessedItems: 如果你得到 UnprocessedItems: ,那么这意味着你的代码工作正常,因为现在我为你做了 POC,它运行完美。 @AbdulMoeez 你是对的,代码运行良好!别的东西让我失望了。谢谢。 【参考方案1】:

第一个示例中的参数确实有效,代码中的其他内容让我失望。

【讨论】:

以上是关于如何在 documentclient.batchWrite() 中使用复合主键?的主要内容,如果未能解决你的问题,请参考以下文章

如何在表单提交后保留文本(如何在提交后不删除自身?)

如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?