2016-07-19 68 views
4

我收到“提供的关键元素与模式不匹配”​​的错误。 uuid是我的主分区键。我还有一个主要的排序键version。我想我可以使用batchWritedocs)删除所有具有相同uuid的项目。如何使用DynamoDB批量删除?

我ES6代码如下:

delete(uuid) { 
    const promise = new Promise(); 
    const params = { 
    RequestItems: { 
     [this.TABLE]: [ 
     { 
      DeleteRequest: { 
      Key: { uuid: uuid } 
      } 
     } 
     ] 
    } 
    }; 


    // this._client references the DocumentClient 
    this._client.batchWrite(params, function(err, data) { 
    if (err) { 
     // this gets hit with error 
     console.log(err); 
     return promise.reject(err); 
    } 

    console.log(result); 
    return promise.resolve(result); 
    }); 

    return promise; 
} 

不知道为什么它是对是主要的关键示数。当我搜索某些不是关键的东西时,我已经看到有关需要其他索引的帖子。但我不认为这是这种情况。

+0

是否有可能在'uuid'字段设置为一个字符串,你给它一个数字,或者反之亦然? – mindoftea

+0

@mindoftea不错的猜测,但我传递一个长字符串到期望一个字符串的字段。 ''“RequestItems”:{“campaigns”:[{“DeleteRequest”:{“Key”:{“uuid”:“2f114a47 -835e-4937-a0b6-675e0e15ab86“}}}]}}' –

+0

你在美国东部工作吗?实际上,我在这篇文章中发生过,因为我一直在从发电机那里得到奇怪的服务器错误 - 也许今天它已经坏了。 – mindoftea

回答

4

这是批量写入删除请求示例。此代码已经过测试并且工作正常。如果您根据您的要求更改此代码,它应该可以工作。

表定义: -

袋 - 表名

袋 - 散列键

在 '袋' 表没有分区键

批量写入代码: -

var AWS = require("aws-sdk"); 

AWS.config.update({ 
    region : "us-west-2", 
    endpoint : "http://localhost:8000" 
}); 

var documentclient = new AWS.DynamoDB.DocumentClient(); 

var itemsArray = []; 

var item1 = { 
    DeleteRequest : { 
     Key : { 
      'bag' : 'b1'  
     } 
    } 
}; 

itemsArray.push(item1); 

var item2 = { 
    DeleteRequest : { 
     Key : { 
      'bag' : 'b2'  
     } 
    } 
}; 

itemsArray.push(item2); 

var params = { 
    RequestItems : { 
     'Bag' : itemsArray 
    } 
}; 
documentclient.batchWrite(params, function(err, data) { 
    if (err) { 
     console.log('Batch delete unsuccessful ...'); 
     console.log(err, err.stack); // an error occurred 
    } else { 
     console.log('Batch delete successful ...'); 
     console.log(data); // successful response 
    } 

}); 

输出: -

Batch delete successful ... 
{ UnprocessedItems: {} } 
+0

如何你根本没有分区密钥吗?创建表格时,主键是必填字段。散列键与主键不同吗?我的主要关键是一个哈希值,所以也许我误解他们是一样的。 –

+0

此外,它似乎我们的代码是相同的,我有正确的键和对象数组。我看到你正在通过为每个项目添加一个新条目来进行批处理。 DynamoDB会因为没有传入额外的排序键而失败吗?我正在寻找通过指定'uuid'来删除多个条目,而不必指定'version',因为这会破坏目的 –

+0

啊是啊,它希望排序键和主键能够删除。我认为这不是批次。 :/ –