问题标签 [dynamoose]

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 投票
1 回答
2230 浏览

node.js - 通过不同属性进行动态查询(Node.js)

我需要通过非键属性从DynamoDBvia获取记录(-s)。Dynamoose例如,我需要从someModel字段my_field等于的表中获取所有记录111。我通过以下方式做到这一点:

这段代码停止执行!我的意思是后面的代码不会被调用。

如果我将代码更改为此:

我的查询正在运行,但data包含:

我知道上面的代码是为查询准备的查询参数,但是我如何应用它们并执行查询DynamoDB呢?当然,查询代码放在async函数内部——这就是await写在那里的原因。

我还使用serverless框架来描述DynamoDB方案。但是我写的所有模型都是通过dynamoose.

我错在哪里?

0 投票
1 回答
1796 浏览

node.js - Dynamoose .update 不像 AWS javascript SDK 那样工作。我需要使用 SDK 来更新项目吗?

这是架构和模型

这是 AWS 开发工具包版本的更新

这是我认为在 Dynamoose 中的等效操作

我能够使用 dynamoose 实现这一点的唯一方法是重新创建整个条目并使用 newOrder(replacementObject).save()。关于我可能遗漏的任何想法?使用流畅的 dynamoose 语法来获取 orderId 然后将其放入 AWS SDK 语法中以添加布尔键值对,这感觉很愚蠢。感谢您的阅读和任何帮助。

编辑:当我使用相同的语法但尝试更新现有字符串时,它可以工作。

但是当我尝试修改现有的布尔值时,它不会从 true 变为 false

它也不会添加字符串类型的新键

回顾一下通过 dynamoose 语法进行的更新,它似乎只能更改存储在 dynamo 中的现有字符串。它不会将新键添加为字符串或布尔值,也不会更改现有的布尔值。通过 AWS 开发工具包进行的更新采用主键和新键值对并添加到 dynamo 中的条目。这种行为可以通过 dynamoose 语法来实现吗?

编辑 2 - 当且仅当在传递给模型的模式中定义该键时,Dynamoose 才会将键值添加到 dynamo 中的现有条目。无论 saveUnkown: true 是什么,dynamoose 都不能使用 update 修改任何未在传递给模型的 dynamoose 模式中保存到 dynamo 的键值对。添加:fulfilled: { type: Boolean },到 orederSchema 和以下代码添加 {fulfilled: true } 到 dynamo 条目。

这是预期的行为吗?对我来说,模型中未明确定义的数据将无法使用更新命令修改,这似乎很奇怪,特别是因为 SDK 没有此限制。

要点:dynamoose 模型必须至少包含用作哈希、范围、全局二级索引、全局二级索引范围的键,并且令我惊讶的是,在初始输入后可能需要更改的任何键。

0 投票
1 回答
959 浏览

javascript - 如何使用 dynamoose 进行跳过、排序和限制?

我以前使用过 MongoDB 和 mongoose,现在尝试在我的应用程序中实现 dynamoose,如何在 dynamoose 中为下面显示的 mongoose 查询编写相同的查询?

return this.scan({ abcd: { $ne: null }, activeFlag: true }).skip(9 * (page - 1)).sort({ date: -1 }).limit(9)

我需要相同的 $ne - 不等于跳过排序并且还限制

0 投票
2 回答
3805 浏览

javascript - Dynamoose - 不能用 2 个键查询和在哪里

我已经在 GitHub 上打开了一个相关问题,但也许这里有人可以更快地提供帮助。

概括:

ValidationException: Query key condition not supported 我需要在给定位置的最后(数量)秒内查找记录。很简单,但已经与其他问题相关: 一个另一个

作品

Activity.query('locationId').eq(locationId).exec();

不工作

Activity.query('locationId').eq(locationId).where('createdAt').ge(date).exec();

代码示例:

架构 执行函数的代码

有趣的是,我发现这是建议使用的解决方法,直到他们合并 PR 赋予将时间戳指定为键的能力,但不幸的是它不起作用。

0 投票
2 回答
1332 浏览

node.js - Dynamoose 中的 Schema.Types.ObjectId 等价物

我正在使用 Node 和 React 创建一个片段管理器,这只是一个学习项目,我们可以在我工作的地方使用它。

我之前使用 Express、Mongoose 和 mLab 进行了设置。怀着学习和挑战自我的心态,我想转而使用 AWS 的 DynamoDB。

我发现 Dynaamoose 将是一个很大的帮助,因为 API 几乎与 Mongoose 相同。但是,我似乎无法弄清楚如何重新创建 Schema.Types.ObjectId 所做的事情。

它的格式不完美,但基本上我如何才能以同样的方式引用我的用户和我的类别?

0 投票
2 回答
898 浏览

amazon-dynamodb - 使用 DynamooseJs 在 DynamoDB 中进行 3 列查询

我的表是(device, type, value, timestamp),其中(device,type,timestamp)创建了一个唯一组合(非 DynamoDB DBMS 中复合键的候选者)。

我的查询可以介于这三个属性中的任何一个之间,例如

GET ( value)s from ( device) with ( type) 具有 ( timestamp) 大于 < some-timestamp>

我正在使用dynamoosejs/dynamoose。从大多数搜索中,我相信我应该使用三个字段的组合(作为单个字段 ; device-type-timestamp)作为id. 但是set: functionofSchema不允许我使用对象属性(例如this.device),并且由于某些原因,我无法在外部执行此操作。

我得到的最接近的 ( id:uuidv4:hashKey, device:string:GlobalSecIndex, type:string:LocalSecIndex, timestamp:Date:LocalSecIndex)

( id:uuidv4:rangeKey, device:string:hashKey, type:string:LocalSecIndex, timestamp:Date:LocalSecIndex)

等等..

但是,在使用 Query 时,很难获取特定device,type的结果,因为id, (hashKeyrangeKey) 总是从场景中丢失。

所以这个问题。对于这样的桌子,你会怎么做?

需要注意的是,该表旨在收集来自 IoT 设备的内容,每个设备平均每 5 分钟生成一次。

0 投票
1 回答
813 浏览

node.js - 如何在dynamoose中根据注册日期对所有项目进行排序

摘要:如何根据注册日期对所有项目进行排序。当我尝试它没有输出时,我的代码如下所示

代码示例:

架构

环境:

  • 操作系统:ubuntu
  • 操作系统版本:14.04
  • Node.js 版本(node -v):9.3.0
  • NPM 版本:(npm -v):5.5.1
  • Dynamoose 版本:0.8.7
0 投票
2 回答
1909 浏览

amazon-dynamodb - Dynamoose - 如何在同一个密钥上查询两个 GSI?

我在发电机中有一个键,它有两个具有不同范围键的全局二级索引。像这样:

尝试使用“名称”似乎不是答案。

在构建查询时,我应该如何区分资源中同一 Key 上的两个 GSI?

编辑 - 向架构添加了额外的上下文,将答案移到了答案部分

0 投票
2 回答
866 浏览

node.js - 使用 dynamoose.js 时如何避免在外部将 aws config 设置为 env 变量

除非我通过 env 变量在外部设置它,否则我的 aws 配置不起作用

只有当我在外部设置凭据时,数据库连接才有效,

如果我不在外部设置这些,它就不起作用。例如,如果我在如下代码中设置它,它就不起作用。

我不想在任何外部变量中设置配置。有没有办法在nodejs代码中管理这个?

这些是我尝试过/考虑过的替代品

  1. 在代码中设置环境变量,这也不起作用

    process.env.AWS_REGION='ap-south-1';

  2. 我读到了 dotenv 包。但建议它只用于开发而不是生产(我不确定这是否可行)

请帮我解决这个问题。如何仅在代码中管理配置?

0 投票
1 回答
486 浏览

node.js - 无服务器:尝试使用 async/await 时,dynamodb 在创建记录时出现错误

我正在尝试在 dynamodb(使用 dynamoose)中创建记录。代码是

* create 函数的输入值与我使用batchPut()尝试的相同输入是正确的,它正在工作。甚至更新对表的调用也有效。

这是我得到的错误 - 错误 - {"message":"The conditional request failed", "code":"ConditionalCheckFailedException", "statusCode":400}

这是调用函数 -

} };

我试着用谷歌搜索它,但没有找到任何合适的文件。提前致谢。