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;
}
我遇到的主要问题是向播放列表添加第二个视频。发生的事情是
- 创建房间 - 向数据库添加一个新房间
- 搜索视频
- 点击添加视频到数据库(视频添加成功)
- 单击以将第二个视频添加到数据库(失败,因为
getRoom(code)
失败 - returns 空)
这在昨天还有效,但我不确定为什么它不再有效。
如果有人知道为什么会这样,请告诉我,我觉得这可能是我用 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.
中找到有关此内容的详细信息
我的 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;
}
我遇到的主要问题是向播放列表添加第二个视频。发生的事情是
- 创建房间 - 向数据库添加一个新房间
- 搜索视频
- 点击添加视频到数据库(视频添加成功)
- 单击以将第二个视频添加到数据库(失败,因为
getRoom(code)
失败 - returns 空)
这在昨天还有效,但我不确定为什么它不再有效。
如果有人知道为什么会这样,请告诉我,我觉得这可能是我用 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.
中找到有关此内容的详细信息