Como fazer um select de alta performance de 10 itens a mais ou a menos e depois saber sempre que o usuário atual já visualizou o item no mongodb?[fechado]

StackOverflow https://stackoverflow.com//questions/23047119

Pergunta

Gostaria de implementar um recurso como no youtube onde você sabe quais vídeos viu.

Eu tenho que soluções:

  • Armazene os vídeos reproduzidos no armazenamento local e use esses dados para atualizar a interface do usuário.(Isso exigirá uma alta carga de dados no início se os dados ainda não estiverem no armazenamento local e o usuário tiver visto muitos vídeos)
  • Armazene os dados em uma tabela, é claro, e depois de obter os resultados da consulta, obtenha as informações de cada vídeo relacionadas ao usuário atual.Dessa forma, exigiria muitas consultas na minha opinião.

O que você pode sugerir?

Foi útil?

Solução

Armazene os dados em uma tabela, é claro, e depois de obter os resultados da consulta, obtenha as informações de cada vídeo relacionadas ao usuário atual.Dessa forma, exigiria muitas consultas na minha opinião.

Não vejo como isso requer muitas consultas, você só precisa de duas:um 'normal', um usando $in:

Supondo uma coleção videos { _id, title, description, uploader, date, ... } e uma coleção userRecentVideos { userId, videoIds : [1, 912, 234234, ... ] },

isso fará:

var recent = db.userRecentVideos.find({"userId" : myUserId})[0].videoIds;
var videoInfo = db.videos.find({"_id" : {$in : recent}});

Alternativamente, você pode expor um getVideoInfos Endpoint HTTP que aceita uma lista de IDs e retorna uma lista de meta informações de vídeo.

O videoIds deve ter um tamanho fixo e deve ser inicializado com todos os 0s ou algo assim para que o array não cresça o tempo todo.

Se você realmente deseja armazenar todo o histórico, seria melhor não usar um array incorporado, mas torná-lo uma coleção de vinculadores da seguinte forma:

videoHistory { _id, userId, videoId }

Coloque um índice {_id, userId}, e você pode obter os n vídeos reproduzidos mais recentemente para cada usuário, assumindo _id é uma chave monotônica, como um ID de objeto.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top