2017-10-03 1 views
0

Ich habe versucht, Daten aus der DynamoDB seit 2 Tagen abzufragen. Macht mich wahnsinnig.Kann DynamoDB mit Begins_with für Liste der Elemente nicht abfragen

Ich habe einen Tisch für Schreibtische in einem Büro. Angenommen, es gibt zwei Büros, Cork und Dublin. Ich habe eine Spalte namens "deskName", die Namen wie "cork1", "cork2", "dub1", "dub2" haben würde. Ich möchte in der Lage sein, die Tabelle nach Items abzufragen, die "cork" oder "dub" enthalten, da sie in derselben Tabelle sind, aber ich möchte nicht die gesamte Tabelle zurück scannen.

Table details

Table Columns

Code:

const params = { 
    TableName: process.env.DYNAMODB_DESKS_TABLE, 
    //KeyConditionExpression: '#deskName = :deskName', 
    KeyConditionExpression: "begins_with(#deskName, :deskName)", 
    ExpressionAttributeNames: { 
     "#deskName": "deskName" 
    }, 
    ExpressionAttributeValues: { 
     ":deskName": "cork" 
    } 
    } 

    dynamodb.query(params, (error, result) => { 
    if (error) { 
     console.error(error); 
     callback(null, { 
     statusCode: error.statusCode || 501, 
     headers: {'Content-Type': 'text/plain'}, 
     body: 'Couldn\'t get desks' 
     }); 
     return; 
    } 

    const response = { 
     statusCode: 200, 
     body: JSON.stringify(result.Item) 
    }; 

    callback(null, response); 

    }); 

YAML:

HotDeskDesksDBTable: 
    Type: 'AWS::DynamoDB::Table' 
    DeletionPolicy: Retain 
    Properties: 
    AttributeDefinitions: 
     - 
     AttributeName: deskName 
     AttributeType: S 
    KeySchema: 
     - 
     AttributeName: deskName 
     KeyType: HASH 
    ProvisionedThroughput: 
     ReadCapacityUnits: 1 
     WriteCapacityUnits: 1 
    TableName: ${self:provider.environment.DYNAMODB_DESKS_TABLE} 

ERROR:

ValidationException: Query key condition not supported 

Ich schaffte es, einen Artikel zurück zu bekommen, als ich die Bedingung = 'Kork-1' hatte. Ich möchte jeden Gegenstand bekommen, der mit "Kork" beginnt.

Danke

+0

Was ist der Fehler oder das Problem genau? –

+0

Total vergessen, das hinzuzufügen. Entschuldigung, ich werde es jetzt zur Frage hinzufügen. – SmiffyKmc

+0

@MarkB hat den Fehler jetzt hinzugefügt, vielen Dank dafür! – SmiffyKmc

Antwort

0

Sie diese ... bekommen

Syntax error in module 'api/desks/get': SyntaxError 
    KeyConditionExpression: "#deskName = :deskName", 
    ^^^^^^^^^^^^^^^^^^^^^^ 
SyntaxError: Unexpected identifier 

wegen dieses ...

const params = { 
    TableName: process.env.DYNAMODB_DESKS_TABLE, 
    IndexName: 'deskName' 
    KeyConditionExpression: "#deskName = :deskName", 
    ExpressionAttributeNames:{ 
    "#deskName": "deskName" 
    }, 
    ExpressionAttributeValues: { 
    ":deskName": "cork" 
    } 
} 

JavaScript-Objekte nach jeder Eigenschaft ein Komma erforderlich. Du vermisst einen nach IndexName: 'deskName'.

Ich würde die Verwendung von DocumentClient empfehlen, da Javascript-Datentypen problemlos DynamoDB-Datentypen zugeordnet werden können. Hier

0

ist, was ich sammeln kann:

  1. Sie sind ein Komma am Ende Ihrer Indexname Zeile fehlt:

const params = {

TableName: process.env.DYNAMODB_DESKS_TABLE, 

IndexName: 'deskName', 
  1. Für ExpressionAttributeValues , müssen Sie den Datentyp definieren, das heißt:
ExpressionAttributeValues: { 
    ":deskName": { "S": "cork" } 
} 
+0

Ich habe versucht, das hinzuzufügen, aber es hat leider nicht funktioniert :( – SmiffyKmc

Verwandte Themen