【问题标题】:How to return results in random order with Mongoose (working with skip, limit)如何使用 Mongoose 以随机顺序返回结果(使用跳过、限制)
【发布时间】:2023-03-22 14:53:02
【问题描述】:

假设我有一些书籍模式,并且我想在页面加载时以随机顺序获取书籍。我不能像这样对查找结果进行洗牌:

        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);

原因是每个额外的跳过/限制,例如。 G。当用户向下滚动以加载更多结果时,随机化将从头开始,前端结果将随机播放。

我想要的是它加载第一个 e。 G。 9 以随机顺序生成,然后以随机顺序加载另一个 9。有什么方法可以让 Mongoose 开箱即用?

【问题讨论】:

  • 只是好奇您是否有解决方案。会很好的发布:)

标签: mongodb mongoose


【解决方案1】:

我认为我们可以通过以下方式解决这个问题:

=> 我们需要将已经读取的 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 } }
])

【讨论】:

    猜你喜欢
    • 2017-12-07
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-01
    相关资源
    最近更新 更多