【问题标题】:Select Random 10 documents from mongoDB [duplicate]从 mongoDB 中选择 Random 10 个文档 [重复]
【发布时间】:2019-08-30 06:33:52
【问题描述】:

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

【问题讨论】:

    标签: node.js mongodb aggregation-framework


    【解决方案1】:

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

    let randomDocs = db.col.aggregate(
        [ { $sample: { size: 10 } } ]
    )
    

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

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

    【讨论】:

    • 所以你的意思是我应该将所有以前返回的随机文档保存在一个数组中?这会是一种有效的方法吗?
    • 如果你想保证它们不会再被随机挑选,你应该把它们放在某个地方
    猜你喜欢
    • 2013-04-20
    • 2013-08-09
    • 1970-01-01
    • 2018-08-16
    • 2013-09-03
    • 2012-06-28
    • 2012-11-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多