Я использовал HMSET для хранения объекта после его выравнивания с помощью плоского модуля npm. Так что-то вроде этого:
let bio = {
name: {
first: 'John',
last: 'Doe'
},
goal: {
desc: 'TO BE THE VERY BEST, LIKE NO ONE EVER WAS!',
test: 'TO CATCH THEM IS MY REAL TEST -- ',
cause: 'TO TRAIN THEM IS MY CAUUUUUSE!'
},
hobbies: [ 'making coffee', 'making low carb recipes', 'soccer' ],
'education.college': {
name: 'Baruch'
},
'hobbiesAsObject[]': {
'0': 'making coffee',
'1': 'making low carb recipes',
sport: 'Baseball'
},
age: 44
};
let flatBio = flat(bio);
let hmSetAsyncBio = await client.hmsetAsync('bio', flatBio);
Но я читал, что HMSET считается устаревшим, когда я пытаюсь использовать HSET таким же образом, он не работает. Я знаю, что могу просто JSON .stringfy это и сохранить это, используя обычный SET, но я хотел бы иметь возможность увеличивать поля в моем объекте. Вот как я это делал ранее:
const incrAge = await client.hincrbyAsync('bio', 'age', 1);
Итак, мой вопрос, как я могу сделать это с помощью HSET? Я продолжаю пробовать разные вещи, но, похоже, это не работает. Некоторые примеры, которые я видел, показывают циклическое прохождение объекта (это один пример, который я видел https://thisdavej.com/guides/redis-node/node/hashes.html) и использование HSET для каждого элемента, но у меня есть вложенные объекты, и кажется, что теперь это больше PITA, чем это было раньше. Должен быть более простой способ сделать это?
Версия сервера Redis: 5.0.7 Версия узла: 12.14.0 версия node-redis (npm module): версия 0.1.7 redis (npm) module) версия: 3.0.2
Ошибка при замене
let hmSetAsyncBio = await client.hmsetAsync('bio', flatBio);
на
let hmSetAsyncBio = await client.hsetAsync('bio', flatBio);
Ошибка: node_redis: команда HSET содержит недопустимый тип аргумента. Принимаются только строки, даты и буферы. Пожалуйста, обновите ваш код, чтобы использовать допустимые типы аргументов.