Я изучаю node и mongo и в настоящее время работаю над простым сервером, который просто извлекает 10 случайных документов из mongodb и отправляет их в ответ при получении запроса на получение. Моя следующая цель — создать одну страницу, которая будет отображать эти 10 записей на странице html с некоторым базовым стилем. На странице также есть кнопка «Далее», которая выберет еще 10 случайных записей из базы данных. Проблема в том, как я могу убедиться, что одни и те же записи не будут выбраны дважды в этом процессе?
Чтобы выбрать 10
случайные документы, вы можете использовать этап конвейера $ образец.
let randomDocs = db.col.aggregate(
[ { $sample: { size: 10 } } ]
)
Если вы хотите убедиться, что следующий вызов $sample
не вернет те же документы, вам нужно сделать его с сохранением состояния, что означает, что вы должны отфильтровать документы, которые были возвращены в предыдущем вызове:
db.col.aggregate(
[
{ $match: { _id: { $nin: randomDocs.map(doc => doc._id) } } },
{ $sample: { size: 10 } }
]
)
Вы должны хранить их где-нибудь, если хотите гарантировать, что они не будут выбраны случайным образом снова.
То есть вы имеете в виду, что я должен хранить все ранее возвращенные случайные документы в массиве? Будет ли это эффективным способом?