【问题标题】:How can I fetch documents in a random order using MongoMapper?如何使用 MongoMapper 以随机顺序获取文档?
【发布时间】:2012-02-08 15:10:24
【问题描述】:

我不能使用Array#shuffle,因为我没有获取所有文档(我最多只能获取二十个文档)。如何使用 MongoMapper 从 MongoDB 数据库中获取随机文档(即在 MySQL 中使用 ORDER BY RAND())?

【问题讨论】:

    标签: ruby mongodb random mongomapper


    【解决方案1】:

    没有类似于ORDER BY RAND() 的技术。即使在 MySQL 中,也建议避免使用它(在大型表上)。

    不过,您可以应用一些常见的技巧。

    例如,如果您知道 id 的最小值和最大值,则在该范围内选择一个随机值并获取下一个对象。

    db.collection.find({_id: {$gte: random_id}}).limit(1);
    

    重复 20 次。

    或者您可以自己为每个文档添加“随机”字段(并每隔一段时间重新计算一次)。这样一来,每个查询就不会得到真正随机的结果,但它会很便宜。

    db.collection.find().sort({pseudo_random_field: 1}).limit(20)
    
    // you can also skip some records here, but don't skip a lot.
    

    【讨论】:

      【解决方案2】:

      使用跳过和随机类。

      class Book {
        include MongoMapper::Document
      
        key :title
        key :author
      }
      
      rand = Random.rand(0..(Book.count-1))
      Book.skip(rand).first
      

      【讨论】:

        猜你喜欢
        • 2017-07-18
        • 2017-05-12
        • 1970-01-01
        • 2013-04-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多