Как сделать высокопроизводительный выбор из 10 элементов больше или меньше, а затем узнать, когда текущий пользователь уже просматривал этот элемент в mongodb?[закрыто]

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

Вопрос

Хотелось бы реализовать функцию как в ютубе, где вы будете знать, какие видео вы видели.

Мне нужно решения:

  • Сохраняйте воспроизведенные видео в локальном хранилище и используйте эти данные для обновления пользовательского интерфейса.(Это потребует высокой загрузки данных при запуске, если данные еще не находятся в хранилище и пользователь просмотрел много видео)
  • Разумеется, храните данные в таблице, и после получения результатов запроса получите информацию о каждом видео, связанную с текущим пользователем.На мой взгляд, этот способ потребует слишком много запросов.

Что вы могли бы предложить?

Это было полезно?

Решение

Разумеется, храните данные в таблице, и после получения результатов запроса получите информацию о каждом видео, связанную с текущим пользователем.На мой взгляд, этот способ потребует слишком много запросов.

Я не понимаю, почему для этого требуется много запросов, вам нужно только два:один «обычный», один использующий $in:

Предполагая Коллекция videos { _id, title, description, uploader, date, ... } и коллекция userRecentVideos { userId, videoIds : [1, 912, 234234, ... ] },

это подойдет:

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

Альтернативно, вы можете выставить getVideoInfos Конечная точка HTTP, которая принимает список идентификаторов и возвращает список метаинформации видео.

А videoIds должен иметь фиксированный размер и должен быть инициализирован всеми нулями или чем-то еще, чтобы массив не рос постоянно.

Если вы действительно хотите сохранить всю историю, было бы лучше не использовать встроенный массив, а сделать это коллекцией компоновщиков следующим образом:

videoHistory { _id, userId, videoId }

Поставить индекс {_id, userId}, и вы можете получить n последних воспроизведенных видео для каждого пользователя, предполагая, что _id — это монотонный ключ, такой как идентификатор объекта.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top