2017-12-04 3 views
0

Ich entwickle etwas mit Nodejs und ich habe eine Tabelle auf DynamoDB. Daher verwende ich aws-sdk für nodejs, um mit diesen beiden Dingen zu arbeiten.AWS DynamoDB Liste distinct ID

Hier ist ein Beispiel. ID und Name sind die kombinierten Schlüssel für die Tabelle.

ID name otherData 
---------------------- 
1  Matt 123 
1  Mary 1234 
2  Mary 2312 
4  Mary 3123 
4  Pet 3123 

Was ich will, ist eine Liste der eindeutigen ID zu bekommen. Also, die erwartete Ausgabe ist

ID = [1, 2, 4] 

Wie geht das?

+0

Hey @ykn dieser Kasse [https://stackoverflow.com/questions/29992227/retrieve-distinct -Werte-von-dem-Hash-Schlüssel-dynamodb]. –

+0

Also, es gibt keinen API-Aufruf, der dies erreichen kann? – ykn121

+0

Ich denke, Sie müssen einen Scan mit dem passenden '' ScanFilter''' durchführen. Überprüfen Sie hier "http: // docs.aws.amazon.com/kinesisalystics/neueste/dev/count-distinct-Artikel-Beispiel.html" –

Antwort

1

1) Führen Sie einen DynamoDB-Scan durch, um alle (nicht eindeutigen) ID-Werte zu erhalten. Der ProjectionExpression-Wert begrenzt die zurückgegebenen Ergebnisattribute, in diesem Fall nur auf die ID. Beachten Sie, dass dies Ihren Scan nicht beschleunigt. Wenn Sie den Scan ausführen, erhalten Sie ein JSON-Objekt, das Ihre Ergebnisse enthält. Sie können JMES verwenden, um das ID-Array (data.Items.ID) abzurufen. Machen

2) das Array einzigartig in Ihrem NodeJS Code (zB mit der ArrNoDupe Code Funktion unten)

var params = { 
ProjectionExpression: "ID", 
TableName: "YOUR_TABLE" 
}; 

ddb.scan(params, function(err, data) { 
    if (err) { 
    console.log("Error", err); 
    } else { 
     console.log(ArrNoDupe(data.Items.ID)); 
    }); 
    } 
}); 

function ArrNoDupe(a) { 
    var temp = {}; 
    for (var i = 0; i < a.length; i++) 
     temp[a[i]] = true; 
    var r = []; 
    for (var k in temp) 
     r.push(k); 
    return r; 
} 
+0

Ich denke, ich akzeptiere dies als die Antwort. Es scheint, dass es keine Möglichkeit gibt, dass dies in aws-Seite laufen kann. Vielen Dank. – ykn121

+0

Soweit ich weiß, ist das richtig. – Stu