2016-09-23 90 views
0

我使用拉姆达(的NodeJS 4.3)来查询我有以下DynamoDB:查询迪纳摩 - 错过了关键

var params = { 
    TableName : "shoes", 
    KeyConditionExpression: "gender = :gender AND support = :support AND terrain = :terrain", 
    ExpressionAttributeValues: { 
     ":input": inputGender, 
     ":input": inputSupport, 
     ":input": inputTerrain 
    } 
} 

在运行此我得到的是我丢失的错误“查询条件错过了关键架构元素:Id“。这可能只是我的一个基本误解,但如果我想查询DynamoDB中的两个或更多字段,是否需要将它们设置为键或在所有字段上创建索引?

在此先感谢。

回答

0

A 查询必须包含表的分区键(或全局二级索引)。您的表的分区键是id,您没有在查询中包含该键。鉴于您正在尝试运行的查询,我认为在您的表上创建GSI并不合理。您将需要执行full table scan操作而不是查询操作。

+0

这可能是我对Dynamo(第一次定时器)的根本误解,但我基本上有一个用户选择3个字段,然后想要查询Dynamo的结果。分区键现在是一个ID,用户永远不会知道这一点来查询它。这在传统SQL中显然非常简单,因为“SELECT * FROM Tbl WHERE row1 = X OR row2 = Y OR row3 = Z”类型的东西。将这种思想转化为迪纳摩的任何指导? – jeremykrall

+0

当我运行它现在我得到“条件只能是1或2的长度”,“ – jeremykrall

+0

不知道还有什么要告诉你。你读过我的答案吗?你肯定有一个基本的误解,如何执行这种类型在DynamoDB中进行查找您需要执行**扫描**而不是查询您正在尝试将DynamoDB视为SQL数据库,事实并非如此,我建议花时间阅读文档并了解其差异。如果你只是在寻找某人为你修复代码,至少在你的问题中显示更多的代码。 –