Я открыл связанную проблему на GitHub, но, возможно, кто-то здесь сможет помочь быстрее.
Резюме:
ValidationException: Query key condition not supported
Мне нужно найти записи в последнем (количество)секунд в данном месте.Довольно просто, но уже связано с другими проблемами: Один и Другой
РАБОТАЕТ :
Activity.query('locationId').eq(locationId).exec();
НЕ РАБОТАЕТ :
Activity.query('locationId').eq(locationId).where('createdAt').ge(date).exec();
Пример кода:
Схема
const Activity = (dynamoose: typeof dynamooseType) => dynamoose.model<ActivityType, {}>('Activity',
new Schema({
id: {
type: String,
default: () => {
return uuid();
},
hashKey: true,
},
userId: {
type: String,
},
locationId: {
type: String,
rangeKey: true,
index: {
global: true,
},
},
createdAt: { type: Number, rangeKey: true, required: true, default: Date.now },
action: {
type: Number,
},
}, {
expires: 60 * 60 * 24 * 30 * 3, // activity logs to expire after 3 months
}));
Код, который выполняет функцию
Забавная частьзаключается в том, что я нашел это как обходной путь, предложенный для использования до тех пор, пока они не объединят PR, предоставляя возможность указывать метки времени в качестве ключей, но, к сожалению, это не работает.
async getActivitiesInLastSeconds(locationId: string, timeoutInSeconds: number) {
const Activity = schema.Activity(this.dynamoose);
const date = moment().subtract(timeoutInSeconds, 'seconds').valueOf();
return await Activity.query('locationId').eq(locationId)
.where('createdAt').ge(date).exec();
}