Node.js 如何使用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",

我正在尝试使用Nodejs在DynamoDB中扫描,而不使用主排序键。 我有下表

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参数:在paramsUse
filtereexpression
中找到了意外的键'KeyConditionExpression'。