我是DynamoDB的新用户,如果主要排序键(名称)不存在两次,则只想创建一个新对象。我试过这样的话:
params.id = randomId();
var item = {
TableName: tableName,
Item: params,
ConditionExpression: "#na <> :n",
ExpressionAttributeNames:{"#na":"name"},
ExpressionAttributeValues:{
":n":params.name
}
};
docClient.put(item, function(err, data) {
console.log("Data:", data);
console.log("Err:", err);
});
但仍然创建了该项:/甚至可以在主排序键上创建条件表达式吗?
答案 0 :(得分:0)
实际上我自己遇到了这个问题,as explained here看起来你不能,你必须使用Global Secondary Index作为'sort'键。
您必须首先在GSI上执行单独的get请求,以查看是否存在“name”。
function checkNameDoesNotExist(name, fn){
query.IndexName = 'nameInUsers';
query.KeyConditionExpression = 'name = :n';
query.ExpressionAttributeValues = {
':n': name
};
dynamodb.query(query, function(err, data){
if (err) {
return fn(err);
} else {
fn(null, data);
}
});
}
免责声明:将代码写在我的头顶,不知道它是否有效,但应该给你一个很好的起点
答案 1 :(得分:0)
您可以使用存在条件。它将返回一个错误,指出该对象已存在
var item = {
TableName: tableName,
Item: params,
Expected: {
name: {
Exists: false
}
};
docClient.put(item, function(err, data) {
console.log("Data:", data);
console.log("Err:", err);
});