注册

mongodb 随机获取一条记录的方法

获取 MongoDB 中的随机文档有许多种方式,但以下是几种常见的方法。

方法一:使用 $sample 操作符

MongoDB 3.2 及以上版本支持使用 $sample 操作符从集合中获取随机文档。$sample 操作符通过使用随机采样算法来获取指定数量的随机文档,然后返回它们作为游标中的单个批次。下面是使用 $sample 操作符的语法:

db.collection.aggregate([{ $sample: { size: 1 } }])

上面的代码将从集合中返回随机的一个文档。

示例一:

假设 users 集合中有以下文档:

{
  "_id" : ObjectId("5f1eb6bac236056b8f6e499d"),
  "name" : "john",
  "age" : 25
}
{
  "_id" : ObjectId("5f1eb6c8c236056b8f6e499e"),
  "name" : "peter",
  "age" : 30
}
{
  "_id" : ObjectId("5f1eb6d4c236056b8f6e499f"),
  "name" : "jane",
  "age" : 35
}

使用以下命令可以从 users 集合中获取一个随机文档:

db.users.aggregate([{ $sample: { size: 1 } }])

输出结果:

{ "_id" : ObjectId("5f1eb6c8c236056b8f6e499e"), "name" : "peter", "age" : 30 }

方法二:使用 $in 和 $rand

另一种获取随机文档的方法是基于 $in 操作符和 $rand 操作符的。 $in 操作符用于在集合中查找文档并返回它们的列表。 $rand 操作符用于生成一个随机数,该数用于选择要返回的文档。以下是使用 $in$rand 操作符的语法:

db.collection.find({_id: { $in: [db.collection.findOne()._id] } })

上面的代码将从集合中返回随机的一个文档。

示例二:

使用以下命令可以从 users 集合中获取一个随机文档:

db.users.find({_id: { $in: [db.users.findOne()._id] } })

输出结果:

{ "_id" : ObjectId("5f1eb6bac236056b8f6e499d"), "name" : "john", "age" : 25 }

通过这两种方式,可以轻松地从 MongoDB 中获取随机文档。如果需要获取多个随机文档,则需要修改示例中的 size 或数组。