首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >DynamoDb与ConditionExpression

DynamoDb与ConditionExpression
EN

Stack Overflow用户
提问于 2015-03-01 17:34:02
回答 1查看 4K关注 0票数 4

考虑以下DynamoDb表:

TableName:foo-bar HashKey:Foo, str RangeKey:Bar, str Name:Baz, str

现在,使用vogels API,我试图插入一个带有HashKey、新RangeKey和名称的项。

但是,给定HashKey的名称不能存在:

因此,我们为vogels定义了表布局:

代码语言:javascript
复制
var foobar = vogels.define("foo-bar", {
    tableName: "foo-bar",
    hashKey: "foo",
    rangeKey: "bar",
    schema: {
        "foo": Joi.string(),
        "bar": Joi.string(),
        "name": Joi.string()
    }
});

然后插入该项目:

代码语言:javascript
复制
var itemToInsert = { foo: "foo", bar: "bar2", name: "TEST" };

var params = {};
params.ConditionExpression = "foo <> :foo AND name <> :name";
params.ExpressionAttributeValues = {
    ":foo": itemToInsert.foo,
    ":name": itemToInsert.name
};

foobar
    .create(itemToInsert, params, function(error, data) {
        if(error) {
            console.log(error);
        }
        else {
            console.log(data);
        }
});

表中已有一个具有以下值的项:{foo: "foo", bar: "bar", name: "TEST" }

所以我希望系统给我一个错误,因为由于ConditionExpression已经有了匹配,但是条目插入时没有问题。DynamoDb不可能做到这一点吗?

请注意,无论我是使用vogels还是直接使用aws,它们都有相同的问题,即插入项,而ConditionExpression不阻止插入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-03-02 02:38:17

DynamoDB插入项的原因是您的表使用了一个复合键hashkey: foo,rangekey: bar。您正在尝试使用不同的键插入一个项,在本例中是hashkey: foo,rangekey: bar2。在DynamoDB中,当插入项时,条件表达式仅针对与完全相同的散列和范围键匹配的现有项进行测试。

您正在尝试在一个非键属性上添加一个唯一的约束,这在DynamoDB中是不可能的,并且需要对模式进行更改才能强制执行该约束。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28796757

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档