问题标签 [documentclient]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
571 浏览

mongodb - 使用两个匹配的文件查询 DynamoDB

我是 DynamoDB 的新手。我正在尝试查询具有两个匹配字段的集合。我已经在 mongoDB 中编写了代码,我正在尝试迁移到 DocumentDB。我正面临问题。

MongoDB代码

这很好用

DynamoDB 代码

问题:无效的 KeyConditionExpression:文档路径中使用的表达式属性名称未定义;属性名称:#otp

0 投票
0 回答
51 浏览

amazon-web-services - 如何为 DynamoDB 查询中的分页生成可靠的“hasMoreResults”值

我正在尝试对一个简单的 DynamoDB 表执行分页以按日期范围进行查询,并希望将 LastEvaluatedKey 强制转换为“hasMoreResults”布尔值以供我的前端使用,但现在看到有时会出现非空 LastEvaluatedKey即使日期范围内的项目数量不超过我的限制,也会影响结果。这是否意味着我将始终需要执行不会返回任何其他项目的后续查询?

我的桌子看起来像:

使用 JavaScript DocumentClient,我的查询如下所示:

如果我调用函数的结束日期与第四项的日期完全匹配且 LIMIT 为 4:

我得到以下结果:

太好了,没有 LastEvaluatedKey。这是我所期望的。但是,如果我使用相同的参数调用函数,除了在结束日期添加一分钟,我会得到:

并且LastEvaluatedKey确实出现,即使没有满足查询的其他项目。这个问题有惯用的解决方案吗?ExclusiveStartKey为了确保可靠的值,我的函数内部是否需要后续查询(可能使用) hasMoreResults

0 投票
1 回答
437 浏览

amazon-web-services - AWS DynamoDB DocumentClient 查询错误 - 一个或多个参数值无效:条件参数类型与架构类型不匹配

我有一个名为 AWS DynamoDb 的表AccountXX,它将具有 JSON 结构的项目存储为:

表上有一个名为的全局二级索引Account_email_hash_salt_gsiAccountXX它具有分区键 email 并具有附加属性hash, saltid.

当我发出以下 AWS CLI 命令时,我能够成功查询表中的项目:

的内容values.json是:

但是,当我使用使用以下参数对象的实例发出类似调用时AWS.DynamoDB.DocumentClient,出现错误:

我得到的错误是:

我还尝试使用修改后的参数对象,如下所示:

在这种情况下,我收到以下错误:

在这两种情况下,我的 DynamoDB DocumentClient 查询都发出为:

我应该怎么做才能修复params对象,以便我能够成功查询表?

0 投票
0 回答
109 浏览

node.js - 多个 dynamodb 文档客户端

我倾向于根据逻辑分组将我的 API 的 src 代码组织到多个目录和子文件中,当涉及到数据库操作时,这些最终也会分成逻辑目录

FWIW这些是nodejs lambdas,但我认为这个问题与语言无关

似乎有 3 个选项,我不确定如何对它们进行排名:

  1. let dynamo = new AWS.DynamoDB.DocumentClient({...})在每个需要的文件中实例化一个 dynamodb 文档客户端。
  • 缺点:似乎不需要重复,配置漂移的风险(除非我使用环境变量)
  • 优点:易于实施
  1. 在父文件中实例化 dynamodb 客户端并根据需要导入
  • 缺点:对 webpack 的可能影响,管理相对文件路径可能会变得很麻烦
  • 优点:集中配置
  1. 在控制逻辑的文件中实例化一个 dynamodb 客户端,将作为输入参数添加到所有需要数据库访问的函数中
  • 缺点:将参数添加到函数中似乎很臃肿,仍然会创建多个客户端,尽管没有选项 1 那么多,可能的配置漂移
  • 优点:非常明确的客户范围

我倾向于选项 2,但我真的很感激关于你们如何合理化这一点的任何见解。

0 投票
0 回答
21 浏览

amazon-web-services - 如何在 DynamoDB 中使用 GSI 将投影属性附加到查询结果中?

我在 DynamoDB 中有下表,它表示多对多关系。

PK sk message_text external_user_id
mes_id_1 信息 一些讯息
mes_id_2 信息 另一条消息
user_notify_id_1 mes_id_1 ext_id_1
user_notify_id_1 mes_id_2 ext_id_1
user_notify_id_2 mes_id_2 ext_id_2

在这种情况下,一条消息可以有很多用户,而一个用户可以有很多消息。我创建了一个 GSI,调用user-pk-index了一个分区键external_user_id和一个排序键,pk并在“全部”上使用了投影属性

我有一个节点项目,我正在使用AWS.DynamoDB.DocumentClient(). 我正在尝试使用external_user_id将返回user_notification数据和message数据的查询。

我期待这样的事情:

我正在尝试使用此代码:

上面的代码确实返回了对应的两行,ext_id_1但它没有附加到message_text(见下文)

如何将投影属性附加到上面的结果而不是下面的结果?

0 投票
1 回答
73 浏览

amazon-dynamodb - dynamodb doc client 强制将 put (not update) 放入表中

我正在尝试使用aws-sdk for javascript创建一个名为events的 dynamo 表,特别是AWS.DynamoDB.DocClient()。它被设置为简单地跟踪任何和所有用户事件,并且是一个超级简单的结构。结构如下:

cognitoId(主键) 事件类型 时间戳
* * *

我遇到的问题是,如果用户已经在表中,它不是在表中插入或放入新条目,而是更新。现在我知道它为什么这样做了,因为cognitoId主键,这是 put 函数的预期功能。如果找到主键,它会更新,如果没有,则添加。

我尝试了几种不同的方法,甚至是ConditionalExpression,但无论主键如何,我仍然无法从本质上强制添加一个条目。

我的基本实现如下:

我的问题是,无论是否已经找到主键,实现强制插入的最佳方法是什么?

0 投票
1 回答
153 浏览

node.js - DynamoDB DocumentClient 获取与所选值匹配的所有项目

我正在玩 AWS CDK,到目前为止已经实现了 API Gateway,Lambda 函数指向 DynamoDB。到目前为止,我的 POST/GET 基本 lambda 函数都可以正常工作,因为它相当简单。但是,我现在遇到了一个问题,因为我需要一个更具体的 GET 方法。

对于上下文,假设我有一个产品数据库。每条记录具有以下属性:

我将有一个将传递标签的端点,并且我需要从包含传入列表中的标签的表中获取所有产品。希望这是有道理的。我相信问题在于我对 的错误使用FilterExpression,它目前返回Missing required key 'RequestItems' in params。我的研究表明我可以改用查询,但我认为这不是最好的方法,而且它给了我一些其他错误。所以在我进入兔子洞之前,我想我会寻求帮助。

这是我目前失败的 Lambda:

更改batchGetquery给我这个错误:Either the KeyConditions or KeyConditionExpression parameter must be specified in the request

0 投票
0 回答
20 浏览

documentclient - 如何使用 documentClient.put() 函数仅更新指定字段而不替换 DynamoDB 中的所有项目?

使用 AWS Put,您可以创建新项目(如果主键不存在)或更新现有项目(如果主键存在)。我的情况是,如果它不存在,我想创建一个新项目,但如果它存在,我只需要更新一个指定的字段。太疯狂了,我希望我能得到类似的东西,ReplaceIfAllIfExisting: true | false但我没有。

0 投票
0 回答
35 浏览

amazon-web-services - 限制不适用于 AWS Lambda 函数

我有一个 lambda 函数来从 dynamoDB 中获取项目。我已经设置Limit: 100但它不起作用,它给出的响应为413 - Payload Too Large.

这是我的代码,我正在使用它documentClient.query

请分享您的意见。

谢谢你。

0 投票
1 回答
238 浏览

c# - 在 CosmosDB 使用 DocumentClient 的删除操作中,必须为此操作提供 PartitionKey 值

我正在尝试从 azure 函数的 Cosmos DB 数据库容器中删除一个项目。但我收到此错误必须为此操作提供 PartitionKey 值。我也对此进行了调查但没有从那里得到任何运气。

下面是我的代码 -

谷歌搜索后,我意识到我需要提供一个分区键值作为DeleteDocumentAsync()中的第二个参数,如下所示。但我正在修复如何为该函数提供该分区键值。

数据库名称: Test_DB

表名: Test_Table

分区键: /testCategory

我试图删除的 Test_Table 的一个示例元素是:

谁能帮助我如何将该分区键放入 azure 函数代码中?或者如何调整数据库的表?

提前致谢。