从 mongoDB 中随机选择 10 个文档

Ami*_*Das 2 mongodb node.js aggregation-framework

我正在学习 Node 和 mongo,目前正在开发一个简单的服务器,该服务器只会从 mongodb 中获取 10 个随机文档,并在收到 get 请求时将它们作为响应发送。我的下一个目标是创建一个页面,该页面将在 html 页面中显示这 10 条记录,并具有一些基本样式。该页面还有一个“下一步”按钮,可以从数据库中获取另外 10 条随机记录。问题是如何确保在此过程中不会两次提取相同的记录?

mic*_*ckl 9

要选择10随机文档,您可以使用$sample管道阶段。

let randomDocs = db.col.aggregate(
    [ { $sample: { size: 10 } } ]
)
Run Code Online (Sandbox Code Playgroud)

如果您想确保下一次$sample调用不会返回相同的文档,您需要使其成为有状态的,这意味着您应该过滤掉上一次调用中返回的文档:

db.col.aggregate(
    [
        { $match: { _id: { $nin: randomDocs.map(doc => doc._id) } } },
        { $sample: { size: 10 } } 
    ]
)
Run Code Online (Sandbox Code Playgroud)