redis-om更新后搜索找不到key

Redis-om search cannot find key after updating

我的 Redis-OM 应用程序发生了一些奇怪的行为,我知道这仍然是该软件的非常测试版,但我只是想确保我没有做一些愚蠢的事情(我可能是)

所以我正在设置一个应用程序,以在我临时存储在 Redis 云数据库中的房间内保存视频 ID 的播放列表。

我有一个创建房间的功能,一个用于获取房间详细信息(房间中当前的所有内容),另一个用于将新视频添加到该房间内的播放列表。 (见下文) - 注意:createRoom(data) 中的数据变量只是房间 ID

的字符串
class Room extends Entity {}
let schema = new Schema(
    Room,
    {
        code: { type: 'string' },
        playlist: {
            type: 'array',
            videos: {
                type: 'object',
            },
        },
    },
    {
        dataStructure: 'JSON',
    }
);

export async function createRoom(data) {
    await connect();

    const repository = new Repository(schema, client);

    const room = repository.createEntity(data);

    const id = await repository.save(room);

    await client.execute(['EXPIRE', `Room:${id}`, 43200]);

    return id;
}

export async function getRoom(code) {
    await connect();

    const repository = new Repository(schema, client);

    const room = await repository
        .search()
        .where('code')
        .equals(code)
        .returnFirst();

    return room;
}

export async function addVideoToRoom(code, videoDetails) {
    const room = await getRoom(code);
    await room.playlist.push(videoDetails);

    await connect();

    const repository = new Repository(schema, client);

    const id = await repository.save(room);

    return id;
}

我遇到的主要问题是向播放列表添加第二个视频。发生的事情是

这在昨天还有效,但我不确定为什么它不再有效。

如果有人知道为什么会这样,请告诉我,我觉得这可能是我用 Redis 处理客户端或索引的方式,所以我也为下面的那些函数弹出了我的函数。

const client = new Client();

async function connect() {
    if (!client.isOpen()) {
        await client.open(process.env.REDIS_URL);
    }
}

export async function createIndex() {
    await connect();

    const repository = new Repository(schema, client);

    await repository.dropIndex();

    await repository.createIndex();
}

非常感谢 Stack 的程序员 - 如果我太笨了,我深表歉意。

Node.js 的 Redis OM 既不支持架构中的嵌套对象也不支持 'object' 的类型。有效类型为 'string'、'number'、'boolean' 和 'array'。数组只是字符串数组。其余为self-explanatory.

如果您想要一个包含多个视频的房间,您需要定义一个房间实体,可能带有一个播放列表,该播放列表定义为不是对象数组,而是视频 ID 数组。

可在 README.

中找到有关此内容的详细信息