J'utilise une base de données Amazon DynamoDB et j'ai une liste d'articles avec différentes chaînes comme clé. Je souhaite rechercher des éléments dont la clé contient une sous-chaîne. Par exemple, si certaines des clés sont:
"abcd_aaa"
"abcd_bbb"
"abcd_ccc"
Je veux demander où une clé contient "abcd" et ces 3 éléments seront retournés. Est-ce possible?
Vous ne pouvez interroger le hashKey
qu'à l'aide de l'opérateur d'égalité (EQ
). Cela étant dit, si ces valeurs ("abcd_aaa", "abcd_bbb", "abcd_ccc") appartiennent à votre hashKey
, vous devez les fournir entièrement. D'un autre côté, l'opération Query
permet une correspondance partielle sur le rangeKey
avec l'option de quelques opérateurs de comparaison supplémentaires:
EQ | LE | LT | GE | GT | BEGINS_WITH | BETWEEN
Voir Query
documentation pour plus de détails.
Une possibilité serait d'utiliser un hashKey and rangeKey
où la première partie de votre code serait le hashKey
et la dernière le rangeKey
, exemple:
hashKey : abcd
rangeKey : aaa
En procédant ainsi lorsque vous interrogez par hashKey
(abcd), vous recevrez les trois enregistrements triés par rangeKey
Le scan fonctionnera
quelque chose comme ça
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);
});
}
});