MongoDB 随机查询获取一条或 N 条记录的方法

💡 原文中文,约2000字,阅读约需5分钟。
📝

内容提要

在 MongoDB 中,可以使用 $sample 聚合操作随机获取 N 条记录。通过命令 db.users.aggregate( [ { $sample: { size: N } } ] ),可以从集合中获取随机记录。$sample 的选择方式取决于文档数量和集合大小,可能会返回重复记录。

🎯

关键要点

  • 在 MongoDB 中,可以使用 $sample 聚合操作随机获取 N 条记录。
  • 使用命令 db.users.aggregate( [ { $sample: { size: N } } ] ) 可以从集合中获取随机记录。
  • $sample 的选择方式取决于文档数量和集合大小,可能会返回重复记录。
  • 当 $sample 处于聚合管道的第一阶段且 N 小于总文档数量的 5% 且集合中的文档数量大于 100 时,$sample 将通过伪随机的游标获取记录。
  • 如果不满足上述条件,$sample 将进行集合扫描并通过随机排序选择记录。
  • 使用随机排序时,排序操作有 100 MB 的内存限制。

延伸问答

如何在 MongoDB 中随机获取 N 条记录?

可以使用命令 db.users.aggregate( [ { $sample: { size: N } } ] ) 来随机获取 N 条记录。

$sample 操作的选择方式是什么?

$sample 的选择方式取决于文档数量和集合大小,可能会返回重复记录。

在什么条件下 $sample 会使用伪随机游标?

当 $sample 处于聚合管道的第一阶段,N 小于总文档数量的 5%,且集合中的文档数量大于 100 时,$sample 会使用伪随机游标。

使用随机排序时有什么内存限制?

使用随机排序时,排序操作有 100 MB 的内存限制。

如果不满足 $sample 的条件,会发生什么?

如果不满足条件,$sample 将进行集合扫描,并通过随机排序选择记录。

在大集合中获取随机记录的效率如何?

在一张十亿级的集合上获取 1W 条随机记录,耗时约 2.5 秒。

➡️

继续阅读