Как сделать высокопроизводительный выбор из 10 элементов больше или меньше, а затем узнать, когда текущий пользователь уже просматривал этот элемент в mongodb?[закрыто]
-
21-12-2019 - |
Вопрос
Хотелось бы реализовать функцию как в ютубе, где вы будете знать, какие видео вы видели.
Мне нужно решения:
- Сохраняйте воспроизведенные видео в локальном хранилище и используйте эти данные для обновления пользовательского интерфейса.(Это потребует высокой загрузки данных при запуске, если данные еще не находятся в хранилище и пользователь просмотрел много видео)
- Разумеется, храните данные в таблице, и после получения результатов запроса получите информацию о каждом видео, связанную с текущим пользователем.На мой взгляд, этот способ потребует слишком много запросов.
Что вы могли бы предложить?
Решение
Разумеется, храните данные в таблице, и после получения результатов запроса получите информацию о каждом видео, связанную с текущим пользователем.На мой взгляд, этот способ потребует слишком много запросов.
Я не понимаю, почему для этого требуется много запросов, вам нужно только два:один «обычный», один использующий $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
— это монотонный ключ, такой как идентификатор объекта.