如何在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};