MongoDB $rand 运算符介绍

$rand 运算符是 Mongodb 中的一个内置运算符,用于生成一个[0,1)之间的随机数。它可以用在聚合管道中,例如在$project或$addFields 阶段中。通过使用 $rand 运算符,我们可以生成随机值并将其存储在文档中或进行其他操作。

语法

$rand 运算符的语法如下:

{ $rand: <seed> }

其中,<seed>是一个可选参数,可以是任何整数值。如果指定了<seed>,则每次使用 $rand 运算符时,都会生成相同的随机数序列。如果没有指定<seed>,则使用 Mongodb 系统时间作为默认种子。

使用场景

$rand 运算符通常用于以下场景:

  • 生成随机值并存储在文档中,以用于后续的计算或查询。
  • $sample 阶段中,随机选择文档样本。
  • 生成随机排序的结果。

示例

示例 1:生成随机值并存储在文档中

假设我们有一个包含产品价格的集合,现在我们想要为每个产品添加一个名为“discount”的字段,其值为产品价格的 10%到 20%之间的随机数。我们可以使用以下聚合管道来实现:

db.products.aggregate([
  { $addFields: { discount: { $multiply: [{ $rand: {} }, 0.1] } } }
])

在上面的示例中,我们使用 $rand 运算符来生成一个随机数,然后将其乘以 0.1,得到 10%到 20%之间的随机数,并将其存储在名为“discount”的字段中。

示例 2:随机排序结果

假设我们有一个包含学生成绩的集合,现在我们想要随机排序学生成绩。我们可以使用以下聚合管道来实现:

db.scores.aggregate([
  { $addFields: { random: { $rand: {} } } },
  { $sort: { random: 1 } },
  { $project: { random: 0 } }
])

在上面的示例中,我们使用 $rand 运算符为每个文档生成一个随机数,并将其存储在名为 random 的字段中。然后,我们使用 $sort 阶段按照 random 字段进行升序排序,从而实现了随机排序的效果。最后,我们使用 $project 阶段将 random 字段从结果中排除掉。

结论

$rand 运算符是一个非常有用的 Mongodb 内置运算符,可以用于生成随机数、随机排序结果等多种场景。我们可以使用 $rand 运算符在聚合管道中生成