Node.js 如何使用Nodejs在DynamoDB中不使用主排序键进行扫描
我正在尝试使用Nodejs在DynamoDB中扫描,而不使用主排序键。 我有下表Node.js 如何使用Nodejs在DynamoDB中不使用主排序键进行扫描,node.js,amazon-dynamodb,Node.js,Amazon Dynamodb,我正在尝试使用Nodejs在DynamoDB中扫描,而不使用主排序键。 我有下表 var params = { AttributeDefinitions: [ { AttributeName: "barname", AttributeType: "S" }, { AttributeName: "timestamp",
var params = {
AttributeDefinitions: [
{
AttributeName: "barname",
AttributeType: "S"
},
{
AttributeName: "timestamp",
AttributeType: "S"
}
],
KeySchema: [
{
AttributeName: "barname",
KeyType: "HASH"
},
{
AttributeName: "timestamp",
KeyType: "RANGE"
}
],
ProvisionedThroughput: {
ReadCapacityUnits: 1,
WriteCapacityUnits: 1
},
TableName: tableName
};
我提出两个目标:
data1 = {
barname: "paul",
timestamp: new Date().toISOString(),
sync: false,
number : "1234",
}
data2 = {
barname: "john",
timestamp: new Date().toISOString(),
sync: true,
number : "333",
}
如何扫描barname='john'和sync=true的所有对象
我试过这样的方法:
var params = {
TableName: tableName,
FilterExpression: "sync = :sync and barname = :barname",
ExpressionAttributeValues: {
':barname' : {S: 'john'},
':sync' : {BOOL: true}
},
};
dynamodb.scan(params, function(err, data){ ... }
扫描未找到任何内容:
{项:[],计数:0,扫描计数:4}
但我有两个匹配的对象:
您得到的错误是因为您使用的是
DynamoDB.DocumentClient
,但您在过滤器表达式中指定了完整属性类型。如果您只是将表达式更改为不包含该类型,那么它应该可以工作。我不想解释为什么这可能是个坏主意(扫描)
var参数={
TableName:TableName,
FilterExpression:“sync=:sync和barname=:barname”,
表达式属性值:{
“:巴纳姆“:”约翰“,
“:sync”:true
},
};
dynamodb.scan(参数,函数(错误,数据){…}
还为sync
值提供expressionAttributeValue
。我更新了代码。我收到错误:MultipleValidationErrors:有2个验证错误:*意外参数:在参数中找到意外键“KeyConditionExpression”*InvalidParameterType:预期参数。expressionAttributeValue[':sync']作为一个结构:sync:{BOOL:true}哦,很抱歉。现在我得到了这个错误:Unexpected参数:在paramsUsefiltereexpression
中找到了意外的键'KeyConditionExpression'。