文档菜单
文档首页
/
MongoDB 手册
/ / / /

$rand

本页内容

  • 定义
  • 语法
  • 示例
  • 了解更多
$rand

返回一个在区间 [0, 1) 内的伪随机浮点数。0 包含,1 不包含。

$rand 的语法如下

{ $rand: {} }

本节中的示例展示了慈善捐赠。以下集合包含捐赠者列表

db.donors.insertMany(
[
{ donorId: 1000, amount: 0, frequency: 1 },
{ donorId: 1001, amount: 0, frequency: 2 },
{ donorId: 1002, amount: 0, frequency: 1 },
{ donorId: 1003, amount: 0, frequency: 2 },
{ donorId: 1004, amount: 0, frequency: 1 }
]
)

以下示例使用随机捐赠金额更新《donors》集合中的每个文档

db.donors.updateMany(
{},
[
{ $set:
{ amount:
{ $floor:
{ $multiply: [ { $rand: {} }, 100 ] }
}
}
}
]
)

空的更新过滤器与集合中的每个文档匹配。

对于每个文档,我们使用$rand生成介于0和1之间的值,然后使用$multiply.

$floor运算符删除小数部分,因此更新的amount是一个整数值。

更新集合后,文档看起来像这样

{ "donorId" : 1000, "amount" : 2, "frequency" : 1 }
{ "donorId" : 1001, "amount" : 58, "frequency" : 2 }
{ "donorId" : 1002, "amount" : 27, "frequency" : 1 }
{ "donorId" : 1003, "amount" : 26, "frequency" : 2 }
{ "donorId" : 1004, "amount" : 42, "frequency" : 1 }

$rand运算符可用于从集合中选择随机文档。假设有一个选民记录集合

db.voters.insertMany(
[
{ name: "Archibald", voterId: 4321, district: 3, registered: true },
{ name: "Beckham", voterId: 4331, district: 3, registered: true },
{ name: "Carolin", voterId: 5321, district: 4, registered: true },
{ name: "Debarge", voterId: 4343, district: 3, registered: false },
{ name: "Eckhard", voterId: 4161, district: 3, registered: false },
{ name: "Faberge", voterId: 4300, district: 1, registered: true },
{ name: "Grimwald", voterId: 4111, district: 3, registered: true },
{ name: "Humphrey", voterId: 2021, district: 3, registered: true },
{ name: "Idelfon", voterId: 1021, district: 4, registered: true },
{ name: "Justo", voterId: 9891, district: 3, registered: false }
]
)

以下查询检索了3区大约一半选民的随机选择

db.voters.find(
{ district: 3,
$expr: { $lt: [0.5, {$rand: {} } ] }
},
{ _id: 0, name: 1, registered: 1 }
)

district 字段上的初始匹配选择选民来自3区的文档。

操作符 $expr 使用 $rand 进一步细化 find 操作。对于每个文档,$rand 生成0到1之间的值。阈值为 0.5 意味着小于 ($lt) 的比较将为集合中大约一半的文档返回 true。

3区有7名选民,运行此代码将选择其中大约一半。

{ "name" : "Beckham", "registered" : true }
{ "name" : "Eckhard", "registered" : false }
{ "name" : "Grimwald", "registered" : true }
{ "name" : "Humphrey", "registered" : true }

$rand (聚合)

返回

$natural