当前位置: 首页 > 知识库问答 >
问题:

AWS Lambda:如何在Dynamodb中将数字添加到NS集

陆寒
2023-03-14

我尝试了几种方法,但一直未能找到如何将数字添加到NS集合中。这都是在lambda函数内运行的。

我正在创建一个 dynamodb 表,其中十六进制中的不同颜色与一组 id 对齐。我正在优化表以实现快速读取并避免重复,这就是为什么我想为每个十六进制维护一组 ID。

如何将项目添加到表中:

let doc = require('dynamodb-doc');
let dynamo = new doc.DynamoDB();

var object = {
    'TableName': 'Hex',
    'Item': {
        'hex': '#FEFEFE',
        'ids': {
            'NS': [2,3,4]
        }
    }
}

dynamo.putItem(object, callback);

使用Dynamodb更新项目文档标准

var params = {
    "TableName" : "Hex",
    "Key": {
      "hex": "#FEFEFE"
    },
    "UpdateExpression" : "ADD #oldIds :newIds",
    "ExpressionAttributeNames" : {
      "#oldIds" : "ids"
    },
    "ExpressionAttributeValues": { 
      ":newIds" : {"NS": ["5", "6"]}
   },
};

dynamo.updateItem(params, callback);

这会返回以下错误,因此Dynamo认为:newIds是地图类型而不是set(?)

"errorMessage": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: MAP"

尝试2:

var setTest = new Set([5, 6]);

var params = {
    "TableName" : "Hex",
    "Key": {
      "hex": "#FEFEFE"
    },
    "UpdateExpression" : "ADD #oldIds :newIds",
    "ExpressionAttributeNames" : {
      "#oldIds" : "ids"
    },
    "ExpressionAttributeValues": { 
      ":newIds" : setTest
   },
};

dynamo.updateItem(params, callback);

错误 2(相同的错误):

"errorMessage": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: MAP"

试试3:

var params = {
    "TableName" : "Hex",
    "Key": {
      "hex": "#FEFEFE"
    },
    "UpdateExpression" : "ADD #oldIds :newIds",
    "ExpressionAttributeNames" : {
      "#oldIds" : "ids"
    },
    "ExpressionAttributeValues": { 
      ":newIds" : { "NS" : { "L" : [ { "N" : "5" }, { "N" : "6" } ] }}
   },
};

dynamo.updateItem(params, callback);

错误3(相同错误):

"errorMessage": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: MAP"

尝试4:

var params = {
    "TableName" : "Hex",
    "Key": {
      "hex": "#FEFEFE"
    },
    "UpdateExpression" : "ADD #oldIds :newIds",
    "ExpressionAttributeNames" : {
      "#oldIds" : "ids"
    },
    "ExpressionAttributeValues": { 
      ":newIds" : [5,6]
   },
};

dynamo.updateItem(params, callback);

错误4(类似错误,但迪纳摩认为我这次添加了一个列表)

"errorMessage": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: LIST"

https://stackoverflow.com/a/37585600/4975772(我正在添加到一个集合,而不是列表)

https://stackoverflow.com/a/37143879/4975772(我使用的是javascript,而不是python,但我基本上需要相同的东西,只是不同的语法)

https://github.com/awslabs/dynamodb-document-js-sdk/issues/40#issuecomment-123003444(我需要做这件事,但我没有使用dynedb文档js-sdk,我使用的是AWS Lambda

共有3个答案

沈俊美
2023-03-14

这个答案可能对那些使用npm DynamoDB模块的人有所帮助

我们有同样的问题。因为我们使用npm dynamodb模块进行查询,而不是从AWS导出。DynamoDB模块,给出了AWS的解决方案。DynamoDBDocumentClint是可实现的,除非我们可以从npm dynamoDb模块转移到AWS。DynamoDB查询。所以与其转移/转换查询。

我们尝试将DynamoDB npm模块降级到版本~1.1.0并且它成功了。以前的版本是1.2。X.

梁丘缪文
2023-03-14

我也一直在纠结这个。我发现DynamoDB实际上有两个api。

AWS. DynamoDB

AWS。DynamoDBDocumentClient

像你一样,我无法使ADD功能工作。我尝试导入并使用DynamoDB api,而不是DynamoDBDocumentClient api。它为我解决了这个问题。我使用字符串集而不是数字集,但我想这不会有什么区别。

var AWS = require('aws-sdk');
var dynamo = new AWS.DynamoDB();
// var dynamo = new AWS.DynamoDB.DocumentClient();

...

var params = {};
params.TableName = “MyTable”;
params.ExpressionAttributeValues = { ':newIds': { "SS": ["someId"] } };
// :newIds represents a new dynamodb set with 1 element
params.UpdateExpression = "ADD someAttribute :newIds";
dynamoClient.updateItem(params, function(err, data) { ….}
颛孙建业
2023-03-14
let AWS = require('aws-sdk');
let docClient = new AWS.DynamoDB.DocumentClient();

...

var params = {
    TableName : 'Hex',
    Key: {'hex': '#FEFEFE'},
    UpdateExpression : 'ADD #oldIds :newIds',
    ExpressionAttributeNames : {
      '#oldIds' : 'ids'
    },
    ExpressionAttributeValues : {
      ':newIds' : docClient.createSet([1,2])
    }
};

docClient.update(params, callback);

这导致这个dynamodb表:

如果该集不存在,则该代码将为您创建它。还可以使用不同的集运行该代码以更新该集的元素。超级方便。

let doc = require('dynamodb-doc');
let dynamo = new doc.DynamoDB();

var params = {
    TableName : 'Hex',
    Key: {'hex': '#555555'},
    UpdateExpression : 'ADD #oldIds :newIds',
    ExpressionAttributeNames : {
      '#oldIds' : 'ids'
    },
    ExpressionAttributeValues : {
      ':newIds' : dynamo.Set([2,3], 'N')
    }
};

dynamo.updateItem(params, callback);

(不要在将来的开发中使用这段代码,我只是为了帮助任何使用现有DynamoDB文档SDK的人)

注意,当我问这个问题时,结果集看起来像一个字面上的json映射对象(当在dynedb截图中查看时),这将解释这个错误消息

"errorMessage": "Invalid UpdateExpression: Incorrect operand type for operator or function; operator: ADD, operand type: MAP"

所以我使用了错误的语法。该解决方案可在(现已弃用)AWS Labs dynamodb-document-js-sdk 文档中找到

更新文档客户端的完整留档可在此处查看:http://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html

 类似资料:
  • 我可以在苹果Notes和其他Notes app中看到,它们有表格嵌入到文本编辑器中。Swift有NSTextTable,但它只适用于macOS。我想知道我怎么能给macOS和iOS都添加一个表呢? 此外,这些表应该是交互式的,就像在Apple Notes中一样,我可以添加一行或列,移动它们,等等。我看过这个项目,它可以让你嵌入一个NS/UIView到编辑器中,但这似乎更像是一个黑客。 有什么想法吗

  • 我已经阅读了官方的AWS文档和几个论坛,但是我仍然找不到我在使用Python/Boto3和Dynamodb向string_集合添加项目时做错了什么。这是我的密码: 我得到的错误是: 调用UpdateItem操作时发生错误(ValidationException):更新表达式中的操作数的数据类型不正确\“

  • 我的团队在DynamoDB中添加了一个新字段,我需要为当前不包含该字段的所有条目添加一个整数。 我尝试在这里使用Update示例,但是我得到了一个,因为我的子句不包括主键。但是,我不需要按主键过滤,因为我只关心没有新列值的条目。 我正在运行的查询是PartiQL,它是:

  • 问题内容: 我在任何地方都找不到它,所以您的帮助对我非常有用:)这是该字段: FragmentCategory: 这是发送的表格: 我尝试过这样的事情: categories = fragmentCategory.objects.get(id=1), 要么: 问题答案: Django文档的整个页面都专门针对此内容,并从内容页面进行了索引。 如该页面所述,你需要执行以下操作: 要么

  • 我试图更新项目属性,这是一个字符串列表。仅当属性不存在时,才能更新(追加)该属性。有点list_append var参数={... 'SET friends=list\u append(如果不存在(friends,:empty\u list),:new\u friends)', 这不管用,有办法吗?因此,如果Bobo仍然不在我的“朋友”列表中,它将附加它

  • 问题内容: 有没有更好的方法来获得此结果?如果num的位数比位数多,则此函数将失败,并且我认为它应该在库中的某个位置(例如Integer.toString(x,“%3d”)等) 问题答案: tring.format(http://java.sun.com/j2se/1.5.0/docs/api/java/util/Formatter.html#syntax) 在你的情况下,它将是: 0 - to

  • 我正在执行对DynamoDB表的扫描,然后我需要将返回项中的相应属性添加到类型的列表中(具有单个构造函数)。代码当前成功扫描DB并返回扫描结果的。然而,由于某种原因,我的迭代似乎返回null。

  • 问题内容: 在我的Java桌面应用程序中,我有一个TableView,我想在其中包含CheckBoxes列。 我确实在http://www.jonathangiles.net/javafx/2.0/CellFactories/上找到了完成的位置,但是由于无法下载,因为我不知道Jonathan Giles会多久回复我的电子邮件,所以我认为d问… 如何将CheckBox放在TableView的单元格中