2

我正在尝试打乱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() 并不完美,但是该命令从未更新过集合中的第一个文档。

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

4

1 回答 1

1

这些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'
  }})
})
于 2015-07-16T22:55:28.397 回答