我正在尝试在dynamo数据库列表中执行最简单的操作之一“更新”。

表格架构-

businessId : String, customers: StringSet,  itemCode : NumberSet


我有一个通过put插入的条目-

bussinessId = "sampleBusiness", cuatomers 0: "cust1", itemCode 0: 4554


我想使用更新添加更多项目,这是我尝试过的-

 var updateRequest = {
    'TableName' : tableName,
    'Key' : {
        'businessId' : {
            "S" : businessId
        }
    },
    'UpdateExpression' : "SET itemCode[2] =:attrValue",
    'ExpressionAttributeValues' : {
        ':attrValue' : {
            "N" : "564564"
        }
    }
};


这给我错误-


  文件中提供的文件路径无效


我想附加新条目,因此也尝试过此操作-

var sm = [];
sm[0] = "56465";

//Add business to
var updateRequest = {
    'TableName' : tableName,
    'Key' : {
        'businessId' : {
            "S" : businessId
        }
    },
    'UpdateExpression' : 'SET #attrName = list_append(#attrName, :attrValue)',
    'ExpressionAttributeNames' : {
        '#attrName' : 'itemCode'
    },
    'ExpressionAttributeValues' : {
        ':attrValue' : {
            "NS" : sm
        }
    }
  };


这给出:


  ValidationException:无效的UpdateExpression:运算符或函数的操作数类型错误;运算符或函数:list_append,操作数类型:NS


也尝试过-

 ':attrValue' : {
                "N" : "4564"
            }


但是同样的错误。

按照http://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Expressions.Modifying.html中提供的示例,它将为FiveStar审阅列表添加一个新元素。表达式属性名称#prProductReviews;属性值:r是一个元素列表。如果列表先前有两个元素[0]和[1],则新元素将为[2]。

SET #pr.FiveStar = list_append(#pr.FiveStar, :r)


:r是一个元素列表

我在这里错过了一些东西。要求是否有人可以提供帮助。打击了很长时间。我只想使用nodeJS在dynamo db中的集合中追加元素。

最佳答案

看起来像这样:

'ExpressionAttributeValues' : {
    ':attrValue' : {
        "NS" : sm
    }
}


应该是这样的:

'ExpressionAttributeValues' : {
    ':attrValue' : {
        "S" : sm
    }
}


或者,您需要将此值sm[0] = "56465";强制转换为数字Number("56465"),并将:attrValue数据类型"S"更改为"N"。取决于您如何配置表。

也有可能应该将:attrValue分配为"S" : sm[0],因为现在您正在传递"S"整个数组。

07-24 09:48
查看更多