基本上,我正在尝试使用redisJSON将应用程序的JSON存储在redis中。在我修改和更新json的项目中,我在这里和那里有不同的功能。现在,当我尝试在redis中存储和更新值时,我必须不断复制这些值以进行更改,然后将其更新回redis。这个程序有其他选择吗?
const addUser = async () => {
try {
const USERS_KEY = 'users';
let mainUsers;
mainUsers = await redisClient.json.get(USERS_KEY, {
path: '.',
});
if (!mainUsers) {
await redisClient.json.set(USERS_KEY, '.', {});
mainUsers = await redisClient.json.get(USERS_KEY, {
path: '.',
});
}
const mainUsersCopy = { ...mainUsers };
console.log('The actual object we need', mainUsersCopy);
const newUser = {
socketId: 123,
roomId: 456,
teamName: teamA,
rank: 69,
userName: 'X'
};
mainUsersCopy[userName] = newUser;
await redisClient.json.set(USERS_KEY, '.', mainUsersCopy);
return { status: 2, userObj: mainUsersCopy[userName] };
} catch (err) {
console.log(err);
}
};
我举了一个上面的例子,在此基础上,你们能为我提供一个不使用mainUsersCopy的解决方案吗。仅供参考,控制台记录我们得到的mainUsers:
mainUsers is here [object Object]
这就是mainUsers被破坏的原因。提前谢谢。
您不需要在此处复制任何内容。只需在JSON文档中设置要使用.set
:设置的值
const newUser = {
socketId: 123,
roomId: 456,
teamName: teamA,
rank: 69, /* nice */
userName: 'X'
};
await redisClient.json.set(USERS_KEY, `.${newUser.userName}`, newUser);
这应该在现有JSON文档的中设置对象newUser
,在其中创建一个名为X
的新键。