Redis om搜索在更新后找不到关键字



我的Redis OM应用程序出现了一些奇怪的行为,我知道这仍然是一个非常BETA版本的软件,但我只是想确保我没有做一些愚蠢的事情(我可能是(

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

我有一个创建房间的功能,一个获取房间详细信息(房间中当前的所有内容(的功能,还有一个向该房间的播放列表添加新视频的功能。(见下文(-注意: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;
}

我遇到的主要问题是在播放列表中添加第二个视频。

  • 创建房间-向数据库添加一个新房间
  • 搜索视频
  • 单击可将视频添加到数据库(视频已成功添加(
  • 单击将第二个视频添加到DB(由于getRoom(code)失败而失败-返回null(

这昨天起作用了,但我不知道为什么它不再起作用。

如果有人知道为什么会这样,请告诉我,我有一种感觉,这可能是我用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的程序员——如果我太笨了,我深表歉意。

Redis OM for Node.js在Schema中既不支持嵌套对象,也不支持"对象"类型。有效类型为"string"、"number"、"boolean"one_answers"array"。数组只是字符串的数组。其余的都是不言自明的。

如果你想要一个有多个视频的房间,你需要定义一个房间实体,也许有一个播放列表,它不是定义为对象数组,而是定义为视频ID数组。

有关详细信息,请参阅自述文件。

相关内容

最新更新