Document AWS vérifié, mais aucun exemple de travail trouvé.
Voici ma tentative
var params = {
TableName: "User",
IndexName:"a-b-index",
KeyConditionExpression: "Country = :country and #s = :status",
FilterExpression: "Id IN (:e)",
ExpressionAttributeValues: {
":country ": "USA",
":status": 1,
":e": "1"
},
ExpressionAttributeNames: {"#s": "Status"}
};
//get users
dynamodb.query(params, function (err, data) {
if (err)
//error
else {
//success
}
});
J'ai des enregistrements, mais nous recherchons des enregistrements qui ont l'identifiant 1
mais je veux utiliser un tableau comme celui-ci.
var params = {
TableName: "User",
IndexName:"a-b-index",
KeyConditionExpression: "Country = :country and #s = :status",
FilterExpression: "Id IN (:e)",
ExpressionAttributeValues: {
":country ": "USA",
":status": 1,
":e": ["1","2","3"]
},
ExpressionAttributeNames: {"#s": "Status"}
};
//get users
dynamodb.query(params, function (err, data) {
if (err)
//error
else {
//success
}
});
Comment peut rendre le code ci-dessus comme working.want pour obtenir des enregistrements. la syntaxe est correcte et la requête est exécutée sans erreur mais je ne reçois pas d'enregistrements
S'il vous plaît se référer cette répondre
Résumé: -
Pour un nombre fixe de valeurs dans la clause "IN": -
var params = {
TableName : "Users",
FilterExpression : "username IN (:user1, :user2)",
ExpressionAttributeValues : {
":user1" : "john",
":user2" : "mike"
}
};
Pour plus d'éléments dans un tableau et pour former FilterExpression dynamiquement: -
var titleValues = ["The Big New Movie 2012", "The Big New Movie"];
var titleObject = {};
var index = 0;
titleValues.forEach(function(value) {
index++;
var titleKey = ":titlevalue"+index;
titleObject[titleKey.toString()] = value;
});
var params = {
TableName : "Movies",
FilterExpression : "title IN ("+Object.keys(titleObject).toString()+ ")",
ExpressionAttributeValues : titleObject
};
La réponse de notionquest est correcte, mais je ne peux pas utiliser mes autres valeurs dans ExpressionAttributeValues
comme :country
et :status
.
var AttributeValuesObject = {};
AttributeValuesObject[':country '] = "USA";
AttributeValuesObject[':status'] = 1;
var titleValues = ["1", "2"];
var titleObject = {};
var index = 0;
titleValues.forEach(function(value) {
index++;
var titleKey = ":titleValue"+index;
AttributeValuesObject[titleKey.toString()] = value;
titleObject[titleKey.toString()] = value;
});
var params = {
TableName: "User",
IndexName:"a-b-index",
KeyConditionExpression: "Country = :country and #s = :status",
FilterExpression: "Id IN ("+Object.keys(titleObject).toString()+ ")",
ExpressionAttributeValues: AttributeValuesObject,
ExpressionAttributeNames: {"#s": "Status"}
};
//get users
dynamodb.query(params, function (err, data) {
if (err)
//error
else {
//success
}
});
Vous pouvez également utiliser l'approche de notionquest et insérer simplement vos autres valeurs d'attribut dans le titleObject{}
. par exemple.
var titleObject = { ": country": "USA", ":status": 1, };
Remarque: vous devrez peut-être ajouter un schéma du type "S" si vous n'utilisez pas DocumentClient.
var titleObject = {
":country": { "S":"USA" }, ...
}
Utilisation de es5 et de la carte:
const params = {
TableName: 'personalizations',
KeyConditionExpression: 'accountId = :accountId',
FilterExpression: `websiteId IN (${websites.map(w => `:${w.websiteId}`).join(',')})`,
ExpressionAttributeValues: {':accountId': accountId}
}
for (const website of websites) {
params.ExpressionAttributeValues[`:${website.websiteId}`] = website.websiteId
}
const {Items: personalizations} = await docClient.query(params).promise()