с операцией запроса
В выражении FilterExpression не разрешены ключевые атрибуты. Вы не можете определить выражение фильтра на основе ключа раздела или ключа сортировки.
Итак, ваше поле doc_id
является ключом раздела doc_id-index
и не может использоваться в FilterExpression.
Примечание
FilterExpression применяется после того, как элементы уже прочитаны; процесс фильтрации не потребляет дополнительных единиц емкости чтения.
Я предполагаю, что у вас есть другое поле, например userId
, просто чтобы показать, как реализовать операцию IN. (Запрос)
var params = {
TableName: 'tbl',
IndexName: 'doc_id-index',
KeyConditionExpression: 'doc_id= :doc_id',
FilterExpression: 'userId IN (:userId1,:userId2)',//you can add more userId here
ExpressionAttributeValues: {
':doc_id':100,
':userId1':11,
':userId2':12
}
};
Если у вас есть больше userId, вам следует динамически передавать FilterExpression.
, но в вашем случае вы можете использовать операцию сканирования
var params = {
TableName : "tbl",
FilterExpression : "doc_id IN (:doc_id1, :doc_id2)",
ExpressionAttributeValues : {
":doc_id1" :100,
":doc_id2" :101
}
};
и даже передать в FilterExpression динамически, как показано ниже
var documentsId = ["100", "101","200",...];
var documentsObj = {};
var index = 0;
documentsId.forEach((value)=> {
index++;
var documentKey = ":doc_id"+index;
documentsObj[documentKey.toString()] = value;
});
var params = {
TableName: 'job',
FilterExpression: 'doc_id IN ('+Object.keys(documentsObj).toString()+')',
ExpressionAttributeValues: documentsObj,
};
Примечание : будьте осторожны при использовании операции сканирования, менее эффективны, чем Query.