NodeJS 更新项目/将项目对象放入dynamodb中的数组

voase2hg  于 2023-01-01  发布在  Node.js
关注(0)|答案(1)|浏览(103)

我在dynamodb中将对象推入数组/将对象设置为docs状态时遇到问题。

Invalid UpdateExpression: Incorrect number of operands for operator or function; operator or function: if_not_exists, number of operands: 1

我做错什么了?我很感激你的帮助!

export async function postTrade(position) {
    let params = {
        Key: {
            PK: 'stocks' 
        },
        UpdateExpression: 'set #tickers = list_append(if_not_exists(#tickers))',
        ExpressionAttributeNames: {
            '#tickers': 'tickers'
        },
        ExpressionAttributeValues: {
            ':tickers': [position]
        },
        TableName: 'stockTable'
    };
    await docClient.update(params).promise();
}

迪纳摩唱片

{
 "PK": "stocks",
 "tickers": [
 ]
}
eqqqjvef

eqqqjvef1#

追加到列表

list_append采用2个参数,而不是一个:

  • list_append (list1, list2)
  • 该函数将两个列表作为输入,并将所有元素从list2追加到list1

检查属性是否存在

同样,if_not_exists()采用2个参数:

  • if_not_exists (path, value)
  • 如果该项在指定路径处不包含属性,则if_not_exists的计算结果为value;否则,它的计算结果为path。因此,应该使用空数组作为参数。

溶液
向每个函数传递2个参数,这应该允许您将其追加到列表中。

let params = {
        Key: {
            PK: 'stocks' 
        },
        UpdateExpression: 'set #tickers = list_append(if_not_exists(#tickers, :empty_list), :tickers)',
        ExpressionAttributeNames: {
            '#tickers': 'tickers'
        },
        ExpressionAttributeValues: {
            ':tickers': [position],
            ':empty_list': []
        },
        TableName: 'stockTable'
    };

相关问题