使用 mongo 随机化唯一数据?

Randomizing unique data with mongo?

我正在尝试打乱我数据库中的所有 email 属性。 email 在 Mongoose 模型中被定义为唯一的。这是我在 shell

中尝试 运行 的脚本
db.getCollection('users').update(
  {},
  {$set{
    email:'sanitized'+Math.random()*100000000000000000+'@'+Math.random()*100000000000000000+'.com'
  }},
  {multi:true}
)

我正在尝试这个:

但是返回错误:

duplicate key error index: test.users.$email_1 dup key

我意识到 Math.random() 并不完美,但此命令从未更新过集合中的第一个文档。

我怎样才能做我想做的事?

Math.random 函数在每个客户端执行一次,然后将这个常量电子邮件值传递到更新函数。

如果电子邮件没有唯一索引,数据库中的每个用户都将设置为相同的电子邮件。

您可以像这样进行个别更新:

db.getCollection('users').find().forEach(function(u){
  db.users.update({_id : u._id}, {$set:{
    email:'sanitized'+Math.random()*100000000000000000+'@'+Math.random()*100000000000000000+'.com'
  }})
})