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