我正在使用 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 包含(所有日期格式都不相同,一团糟)并使用年份 2018
或 2017
似乎正在工作。
关于node.js - DynamoDB 从不返回预期结果开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48446806/