【问题标题】:Mongodb providing unique values with $sampleMongodb 通过 $sample 提供唯一值
【发布时间】:2017-02-19 03:18:37
【问题描述】:

我正在尝试使用 mongodb 上的聚合管道来检索 3 个随机文档。

$sample 看起来很理想,但返回的文档不能保证唯一。

关于如何生成 3 个唯一文档作为响应的任何想法?我猜它需要以我不确定的方式进一步使用聚合管道。

这当然是假设集合中有 3 个或更多文档。

谢谢。

【问题讨论】:

    标签: javascript mongodb mongodb-query aggregation-framework


    【解决方案1】:

    您可以做的是请求更多数据,比如 100 个 $sample'd 文档,将这些文档按 _id 分组以删除重复项(为了唯一性)并将输出限制为所需的文档数:

    db.test.aggregate([{
        $sample: { size: 100 }
    }, {
        $group: {
            _id: "$_id",
            document: { $push: "$$ROOT" }
        }
    }, {
        $limit: 3
    }])
    

    【讨论】:

    • 感谢您的回复。这是假设我的集合开始时的大小为 100 或更大,实际上我实际上是从 0 开始增加我的集合,并且希望在每个新条目上检索 3 个文档。我知道这意味着将前 3 个条目作为特例处理……还有什么想法吗?谢谢
    【解决方案2】:

    根据我的测试方式,这个问题似乎实际上是建立在一个不正确的假设之上的。

    $sample 确实返回了唯一的条目,根据定义,我只是发布了相同的请求,并没有意识到数据库已经被相同的请求过度填充。经过检查,objectID 实际上是唯一的,从而解决了问题(诚然,这首先是不存在的)。

    【讨论】:

    • $sample 文档指出它不是唯一的 docs... 你是怎么得出这个结论的?
    猜你喜欢
    • 2012-05-15
    • 1970-01-01
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-13
    • 1970-01-01
    • 2020-04-07
    相关资源
    最近更新 更多