node.js - DynamoDB 从不返回预期结果开始

标签 node.js amazon-dynamodb

我正在使用 NodeJS 和 DynamoDB。我以前从未使用过 DynamoDB,并且主要是 C# 开发人员(这只是一个 .Where(x => x... )调用,不知道为什么亚马逊让它变得更复杂)。我试图简单地根据 id 是否以某些字符开头来查询表。例如,我们将年份作为 Id 的前 2 个字符。 field 。所以像这样:180192 ,所以年份是 2018。20部分无关紧要,只是想举一个人类可读的例子。所以 Id 以 18 开头或 17我只是想查询所有 Id 以 18 开头的行的数据库(例如,可能是 17 或其他)。我确实看过文档,但我不确定我是否完全理解它,这是我到目前为止所拥有的只是返回所有结果而不是预期结果。

   let params = {
        TableName: db.table,
        ProjectionExpression: "id,CompetitorName,code",
        KeyConditionExpression: "begins_with(id, :year)",
        ExpressionAttributeValues: {
            ':year': '18'
        }
    return db.docClient.scan(params).promise();

如您所见,我认为这将是 begins_with调用,在那里我根据 Id 查找 18。但同样,这将返回所有结果(好像我根本没有 KeyConditionExpression 一样)。

很想知道我错在哪里。谢谢!

更新

所以我猜 begin_with不会工作,因为它只适用于字符串,而我的 id 不是字符串。根据评论者的建议,我可以使用 BETWEEN ,即使这样也不起作用。我要么取回所有结果,要么 Query key condition not supported错误(如果我使用 .scan ,我会返回所有结果,如果我使用 .query 我得到错误)

这是我正在尝试的代码。
        let params = {
        TableName: db.table,
        ProjectionExpression: "id,CompetitorName,code",
        KeyConditionExpression: "id BETWEEN :start and :end",
        ExpressionAttributeValues: {
            ':start': 18000,
            ':end': 189999
        }
    };

return db.docClient.query(params).promise();

最佳答案

不幸的是,对于我最初尝试做的事情,似乎没有实际的解决方案。这是 DynamoDB 的一大败笔。确实需要某种方法来使用列的值来执行“何处”操作,就像您可以使用几乎任何其他语言一样。但是,我不得不承认,部分问题在于 id 的方式。是结构化的。你不应该依赖 id 来获取信息。无论如何,我确实找到了另一列 DateofFirstCapture使用 with 包含(所有日期格式都不相同,一团糟)并使用年份 20182017似乎正在工作。

关于node.js - DynamoDB 从不返回预期结果开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48446806/

相关文章:

node.js - mime.lookUp() 不是 node.js 中的函数

clojure - 为什么使用 onyx 的棱柱模式验证失败(ExceptionInfo 值与模式不匹配)?

amazon-dynamodb - DynamoDB 本地 http ://localhost:8000/shell

python - python中没有数据类型的Dynamodb get_item和put_item

javascript - 一种在 NodeJS 中获取和发送 Instagram 直接消息的方法

javascript - 在浏览器上使用 javascript 在 Google API 上发送 post 请求

node.js - 将 Favicon 添加到 Hexo 博客

Node.js 意外 token R

node.js - 为 DynamoDB 项目创建唯一 ID

Java、DynamoDB : Is it possible to custom-marsall a Set?