2016-05-28 2 views
0

Ich habe eine Tabelle in DynamoDB wobei jede Zeile hat die folgende Struktur abfragen:Wie kann ich DynamoDB und das Rück alle untergeordneten Werte für einen bestimmten Schlüssel in einem Array

{ 
    "id": 1, 
    "data": [ 
     { 
      "key": "A", 
      "value": "a" 
     }, 
     { 
      "key": "B", 
      "value": "b" 
     } 
    ] 
}, 
... 

Ich möchte eine Abfrage erstellen, die zurückgibt eine einzelne Datenzeile, bei der die "Wert" -Schlüssel aus den Ergebnissen herausgefiltert wurden. Im Wesentlichen habe ich nach einem Weg suchen diese Ausgabe zu erzeugen:

{ 
    "id": 1, 
    "data": [ 
     { 
      "key": "A" 
     }, 
     { 
      "key": "B" 
     } 
    ] 
} 

Der Trick besteht darin, dass die „Daten“ -Liste eine unbekannte Anzahl von Elementen enthält. Verwendung des folgenden Codes mit Projektions-Ausdrücke, kann ich nahe, was ich in NodeJS brauchen:

var AWS = require('aws-sdk'); 

var docClient = new AWS.DynamoDB.DocumentClient(); 

var params = { 
    TableName: "MyTable", 
    Key: { 
     "id": 1 
    }, 
    ProjectionExpression:"id, data[0].key" 
}; 

docClient.get(params, function(err, data) { 
    if (err) 
     console.log(JSON.stringify(err, null, 2)); 
    else 
     console.log(JSON.stringify(data, null, 2)); 
}); 

Der obige Code gibt die folgende Daten:

{ 
    "id": 1, 
    "data": [ 
     { 
      "key": "A" 
     } 
    ] 
} 

Wie kann ich DynamoDB alle zurückkehren bekommen die Schlüssel innerhalb data und nicht nur einer?

Antwort

1

Dies wird nicht unterstützt.

Wie ich es sehe, haben Sie zwei Möglichkeiten:

  • Wenn es auf der Anzahl der Einträge in data eine obere Kappe ist, für beispielsweise 100, dann können Sie Ihr ProjectionExpression so etwas wie ändern: "id, data[0].key, data[1].key, data[2].key, data[3].key, ..., data[100].key". Es sollte funktionieren, weil gemäß der DynamoDB documentation gibt es nur eine Einschränkung der Liste Indizes:

Der Index in einer Liste dereferenzieren eine nicht negative ganze Zahl

  • Wenn es sein muss, ist keine solche Obergrenze, Filter auf der Client-Seite.
Verwandte Themen