2015-05-09 5 views
7

Ich verwende eine Amazon DynamoDB-Datenbank, und ich habe eine Liste von Elementen mit verschiedenen Zeichenfolgen als Schlüssel. Ich möchte nach Elementen suchen, deren Schlüssel eine Teilzeichenfolge enthält. Wenn zum Beispiel einige der Tasten sind:

„abcd_aaa“
„abcd_bbb“
„abcd_ccc“Amazon DynamoDB Abfrage für Elemente, deren Schlüssel eine Teilzeichenfolge enthält

möchte ich fragen, wo eine Taste „ABCD“ enthält, und diese drei Elemente zurückgegeben. Ist das möglich?

Dank

+1

Ich nehme an "Abfrage", meinen Sie die tatsächliche DynamoDB ['Query'] (http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html) Operation? – mkobit

Antwort

6

Sie nur die hashKey mit dem Gleichheitsoperator (EQ) abfragen. Wenn diese Werte ("abcd_aaa", "abcd_bbb", "abcd_ccc") zu Ihrer hashKey gehören, müssen Sie sie vollständig angeben. Auf der anderen Seite, wird der Query Betrieb teilweise Übereinstimmung damit auf den rangeKey mit der Möglichkeit, ein paar zusätzlichen Vergleichsoperator:

EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN 

die für mehr Details Querydocumentation See.

Eine Möglichkeit wäre, eine hashKey and rangeKey zu verwenden, wo der erste Teil des Codes der hashKey sein würde und die letzte die rangeKey, Beispiel:

hashKey : abcd 
rangeKey : aaa 

Auf diese Weise, wenn Sie von hashKey (ABCD) abfragen, Sie würde alle drei Datensätze durch die rangeKey

+0

Scan funktioniert, obwohl es für dieses Szenario nicht kosteneffektiv ist. –

0

sortiert erhalten Scan funktioniert

so etwas wie dieses

var params = { 
     TableName: "TABLE", 
     ScanFilter: { 
      "id": { 
       ComparisonOperator: "CONTAINS", 
       AttributeValueList: ["abcd"] 
      } 
     } 
}; 

var template = null; 
ddb.scan(params, function (err, data) { 
     if (err) { 
      console.error("Unable to query. Error:", JSON.stringify(err, null, 2)); 
     } else { 
      //console.log("Query succeeded."); 
      data.Items.forEach(function (item) { 
       console.log(item); 
      }); 
     } 
}); 
+0

Der Scan funktioniert zwar möglicherweise, verbraucht jedoch Kapazitätseinheiten, um den gesamten Tabelleninhalt abzurufen und anschließend zu filtern. Dies ist sowohl in Bezug auf die Leistung als auch auf die Kosten sehr ineffizient, was meines Erachtens in der Antwort hervorgehoben werden sollte. – JHH