【问题标题】:Primary sort key DynamoDB attribute expression主排序键 DynamoDB 属性表达式
【发布时间】:2016-02-29 18:21:43
【问题描述】:

我是 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);
        });

但是该项目仍然被创建:/是否甚至可以在主排序键上创建条件表达式?

【问题讨论】:

    标签: expression amazon-dynamodb


    【解决方案1】:

    其实我自己也遇到过这个问题,as explained here 好像不行,你得用Global Secondary Index 作为'sort'键。

    您必须首先在 GSI 上执行单独的获取请求,以查看“名称”是否存在。

    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);
            }
        });
    }
    

    免责声明:把代码写在我的脑海里,不知道它是否有效,但应该给你一个很好的起点

    【讨论】:

      【解决方案2】:

      您可以使用存在条件。它将返回一个错误,说明该对象已存在

      var item = {
          TableName: tableName,
          Item: params,
          Expected: {
          name: {
            Exists: false
          }
      };
      
      docClient.put(item, function(err, data) {
          console.log("Data:", data);
          console.log("Err:", err);
      });
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-03-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-09-21
        • 2020-04-17
        • 1970-01-01
        相关资源
        最近更新 更多