Я новичок в DynamoDB и пытаюсь запросить таблицу из javascript, используя библиотеку Dynamoose . У меня есть таблица с первичным ключом раздела типа String с именем «id», которая в основном представляет собой длинную строку с идентификатором пользователя. У меня есть второй столбец в таблице под названием «атрибуты», который представляет собой карту DynamoDB и используется для хранения произвольных пользовательских атрибутов (я не могу изменить схему, поскольку именно так работает предопределенный адаптер персистентности, и я застрял в работе с ним для удобства). Это пример записи в таблице:
Item{2}
attributes Map{2}
10 Number: 2
11 Number: 4
12 Number: 6
13 Number: 8
id String: YVVVNIL5CB5WXITFTV3JFUBO2IP2C33BY
Поля цифры c, такие как поле «12», на карте можно интерпретировать как «week10», «week11», «week12» и «week13» и значения цифр c 2,4,6 и 8 - это число раз, которое приложение было запущено на этой неделе.
Мне нужно получить все идентификаторы пользователей из записи, которые имеют более 4 запусков в определенную c неделю (например, неделю 12), и мне также нужно получить список идентификаторов пользователей с суммой в 20 запусков в диапазоне от четырех недель (например, с недели 10 до 13).
С Dynamoose мне нужно использовать следующую модель:
dynamoose.model(
DYNAMO_DB_TABLE_NAME,
{id: String, attributes: Map},
{useDocumentTypes: true, saveUnknown: true}
);
(чтобы соответствовать структуре таблицы, сгенерированной адаптером персистентности, который я использую). Я предполагаю, что мне нужно будет выполнить «сканирование» DynamoDB, а не «запрос», и я попытался это начать, чтобы получить записи, где неделя 12 равна 6 безрезультатно (в результате я получаю пустой набор):
const filter = {
FilterExpression: 'contains(#attributes, :val)',
ExpressionAttributeNames: {
'#attributes': 'attributes',
},
ExpressionAttributeValues: {
':val': {'12': 6},
},
};
model.scan(filter).all().exec(function (err, result, lastKey) {
console.log('query result: '+ JSON.stringify(result));
});
Если вы не знаете Dynamoose, но можете помочь решить эту проблему с помощью AWS SDK, запустите сканирование DynamoDB напрямую, что также может быть полезно для меня.
Спасибо!