0

基本上,我正在尝试使用 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被解构的原因。提前致谢。

4

1 回答 1

0

您不需要在此处复制任何内容。只需在您想要设置的 JSON 文档中设置值.set

const newUser = {
  socketId: 123,
  roomId: 456,
  teamName: teamA,
  rank: 69, /* nice */
  userName: 'X'
};

await redisClient.json.set(USERS_KEY, `.${newUser.userName}`, newUser);

这应该newUser 现有的 JSON 文档中设置对象,在其中创建一个名为的新键,在本例X中。

于 2022-02-19T17:06:16.787 回答