使用mongo随机化唯一数据?

时间:2015-07-16 22:23:29

标签: mongodb mongodb-update

我正在尝试加扰我的数据库中的所有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()并不完美,但是这个命令从未更新过集合中的第一个文档。

我该怎样做我想做的事?

1 个答案:

答案 0 :(得分: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'
  }})
})