如何在mongodb中修改字符串的值

如何在mongodb中修改字符串的值,mongodb,mongodb-query,Mongodb,Mongodb Query,我有一个查询,用于查找我要查找的项目: db.user.find({email:/xhjvv123/}).pretty() 这些电子邮件的前8个字符都是字符串(xhjvv123)。我想找到所有带有该字符串的电子邮件,然后删除该字符串 我想我可以使用$substr,但我只能找到返回数据的示例。如何实际更改字符串 根据评论编辑 我有一封电子邮件xhjvv123dbw@test.com。我想将电子邮件更改为dbw@test.com。这将适用于数百封电子邮件;我想找到所有带有字符串xhjvvv123的

我有一个查询,用于查找我要查找的项目:

db.user.find({email:/xhjvv123/}).pretty()
这些电子邮件的前8个字符都是字符串(
xhjvv123
)。我想找到所有带有该字符串的电子邮件,然后删除该字符串

我想我可以使用
$substr
,但我只能找到返回数据的示例。如何实际更改字符串

根据评论编辑


我有一封电子邮件
xhjvv123dbw@test.com
。我想将电子邮件更改为
dbw@test.com
。这将适用于数百封电子邮件;我想找到所有带有字符串
xhjvvv123
的电子邮件,删除该字符串,并保持电子邮件的其余部分不变。

如果您的电子邮件与
xhjvv123
完全匹配,则使用以下查询删除:

db.collectionName.remove({"email":{"$regex":"^\\xhjvv123"}})
或者,如果电子邮件在任何地方包含
xhjvv123
此内容,则将上述内容用作

db.collectionName.remove({"email":{"$regex":"\\xhjvv123"}})
更多关于

编辑

如果您想将匹配的电子邮件更新为其他电子邮件,请在
查询中使用相同的电子邮件,并在
设置中使用您的电子邮件,如下所示:

db.collectionName.update({"email":{"$regex":"^\\xhjvv123"}},{"$set":{"email":"dbw@test.com"}},false,true)

或者干脆试试这个:

db.collectionName.update({"email":{"$regex":"xhjvv123"}},{"$set":{"email":"dbw@test.com"}},false,true)
其他选择

如果你在mongo shell上运行这个

var regex = /xhjvv123/
var matchingEmail = "xhjvv123dbw@test.com"
var result = matchingEmail.replace(regex,"")
db.collectionName.update({"email":regex},{"$set":{"email":result}},false,true)

如果将multi设置为true,update()方法将更新符合条件的所有文档

因此,我不认为要迭代所有文档并替换字符串,multi:true完成工作:)

您可以将该方法与该方法一起使用

var reg=/xhjvv123/;
db.user.find({email:reg}).forEach(函数(doc){
doc.email=doc.email.replace(reg,“”);
db.user.save(单据);
})

演示

>db.user.insert({'email':“xhjvv123dbw@test.com"})
WriteResult({“n插入”:1})
>var reg=/xhjvv123/;
>db.user.find({email:reg}).forEach(函数(doc){
…doc.email=doc.email.replace(reg,“”);
…db.user.save(doc);
... })
>db.user.find()
{“_id”:ObjectId(“556f76e82db797abad412f56”),“email”:dbw@test.com" }
> 
请尝试以下操作:

db.user.find({"email":/xhjvv123/}).ForEach( function(mydoc)
{
mydoc.email = mydoc.email.slice(9,this.email.length);
db.user.save(mydoc);
}
);
(或)


你试过了吗:这些应该能帮助你在改变中获得更多的洞察力value@akshay谢谢但是,这些难道不要求新数据都是相同的吗?如果我用相同的字符串替换我找到的每封电子邮件,我可以使用它们。我只是想删除每个字符串的同一部分,但留下的字符串每次都不一样。是否可能重复?是否要更新文档?@Michael,希望我的编辑完全澄清了我要做的事情。我不想特别使用
update
功能。我想用任何有用的东西。谢谢,但我不想删除整个电子邮件。我只想删除我用来识别电子邮件的部分。因此,我试图删除电子邮件中包含字符串的部分。我有一封电子邮件
xhjvv123dbw@test.com
。我想将电子邮件更改为
dbw@test.com
。我使用mongo shell尝试了此操作,但无法使其正常工作。然而,我确信我做错了什么。我需要把它写进剧本吗?@dwstein你说不能工作是什么意思?添加演示
db.user.find({"email":/xhjvv123/}).ForEach( function(mydoc)
{
mydoc.email = mydoc.email.slice(9,this.email.length);
db.user.save(mydoc);
}
);
May be we you can try below as well in shell, not sure though :

db.user.update( {"email":/xhjvv123/}, {$set:{"email":{this.email.slice(9,this.email.length)}} , multi:true};