假设我有一些书籍,我想在页面加载时以随机顺序获取书籍。我无法像这样洗牌的结果:
const books = await BookModel.find({}, (err, res) => { // eslint-disable-line
// console.log(res);
if (err) {
console.log(err);
}
}).limit(args.limit || 3).skip(args.offset || 3).lean();
return _.shuffle(books);
原因是,在每个附加的跳过/限制上,e。G。当用户向下滚动以加载更多结果时,随机化将再次从头开始,前端结果会随时随地。
我想要的是它加载第一个e。G。9以随机顺序产生,然后按随机顺序加载9个。有什么方法可以用开箱即用?
我认为我们可以通过以下方式解决此问题:
=>我们需要将已经读取的ID发送到下一个块的服务器
...
let ids = [];
if (retrievedIds.length) {
ids = retrievedIds.map((id) => mongoose.Types.ObjectId(id));
}
let filter = { _id: { $nin: ids} }
db.users.aggregate([
{ $match: filter }, //
{ $sample: { size: 10 } }
])