2015-05-09 16 views
7

Sto utilizzando un database Amazon DynamoDB e ho una lista di voci con varie stringhe come chiave. Voglio interrogare gli elementi la cui chiave contiene una sottostringa. Ad esempio, se alcune delle chiavi sono:

"abcd_aaa"
"abcd_bbb"
"abcd_ccc"Query Amazon DynamoDB per elementi la cui chiave contiene una sottostringa

Voglio interrogare in cui una chiave contiene "ABCD" e sarà restituito questi 3 oggetti. È possibile?

Grazie

+1

Sto assumendo per "query", intendi l'operazione DynamoDB ['Query'] (http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_Query.html)? – mkobit

risposta

6

è possibile interrogare solo l'hashKey utilizzando l'operatore di uguaglianza (EQ). Detto questo se quei valori ("abcd_aaa", "abcd_bbb", "abcd_ccc") appartengono al tuo hashKey quindi devi fornirli interamente. D'altra parte, l'operazione Query non permette corrispondenza parziale sul rangeKey con la possibilità di alcuni operatori di confronto aggiuntivi:

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

Vedi l'Querydocumentation per maggiori dettagli.

Una possibilità sarebbe quella di utilizzare un hashKey and rangeKey dove la prima parte del codice sarebbe la hashKey e l'ultimo il rangeKey, ad esempio:

hashKey : abcd 
rangeKey : aaa 

In questo modo, quando si esegue una query da hashKey (abcd), che avrebbe ricevuto tutti e tre i record ordinati in base al rangeKey

+0

La scansione funzionerà sebbene non sia economicamente conveniente per questo scenario. –

0

Scan funziona

qualcosa di simile

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

La scansione potrebbe "funzionare", ma consumerà unità di capacità per recuperare l'intero contenuto della tabella e filtrarla in seguito. Questo è altamente inefficiente sia in termini di prestazioni che di costi, che a mio avviso dovrebbero essere evidenziati nella risposta. – JHH

Problemi correlati