如何用猫鼬以随机顺序返回(使用Skip,限制)



假设我有一些书籍,我想在页面加载时以随机顺序获取书籍。我无法像这样洗牌的结果:

        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 } }
])

最新更新