gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 04:31:22 25 4
gpt4 key购买 nike

我正在使用 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com