2015-06-03 57 views
0

一個字符串值,我有找到的項目的查詢我在尋找:如何修改MongoDB中

db.user.find({email:/xhjvv123/}).pretty() 

這些電子郵件,都有這樣的字符串(xhjvv123)作爲第8字符。我想查找包含該字符串的所有電子郵件,然後刪除該字符串。

我想我可以使用$substr,但我只能找到返回數據的示例。我如何改變字符串?

編輯基於評論

前。我有一個電子郵件[email protected]。我想將電子郵件更改爲[email protected]。對於數百封電子郵件,這將是真實的。我想找到所有電子郵件的字符串xhjvv123,刪除該字符串,並保持電子郵件的其餘部分完好無損。

+0

您是否嘗試過:http://docs.mongodb.org/manual/reference/method/db.collection.update/和http://docs.mongodb.org/manual/reference/operator/update/set/這些應該可以幫助你在改變價值方面給予更多的洞​​察力 – akshay

+0

@akshay謝謝!但是,那些要求新數據都一樣嗎?如果我用相同的字符串替換每封發現的電子郵件,我可以使用這些字符串。我只是試圖刪除每個字符串的相同部分,但每次都會留下不同的字符串。 – dwstein

+0

可能的重複http://stackoverflow.com/questions/12589792/how-to-replace-substring-in-mongodb-document – akshay

回答

0

如果您的電子郵件恆星精確匹配xhjvv123這個然後用下面的查詢刪除:

db.collectionName.remove({"email":{"$regex":"^\\xhjvv123"}}) 

或者如果郵件中包含xhjvv123這在任何地方,然後用上面

db.collectionName.remove({"email":{"$regex":"\\xhjvv123"}}) 

更多$regex

編輯

如果您想更新匹配郵件給其他然後在query使用相同,使用您的電子郵件中set如下:

db.collectionName.update({"email":{"$regex":"^\\xhjvv123"}},{"$set":{"email":"[email protected]"}},false,true) 

db.collectionName.update({"email":{"$regex":"\\xhjvv123"}},{"$set":{"email":"[email protected]"}},false,true) 

或者只需試試這個:

db.collectionName.update({"email":{"$regex":"xhjvv123"}},{"$set":{"email":"[email protected]"}},false,true) 

其他選項

如果在蒙戈運行這個殼

var regex = /xhjvv123/ 
var matchingEmail = "[email protected]" 
var result = matchingEmail.replace(regex,"") 
db.collectionName.update({"email":regex},{"$set":{"email":result}},false,true) 

update

多設置爲true,update()方法更新符合條件的所有文件。

所以我不認爲遍歷所有文件並替換字符串,多:真做的工作:)

+0

謝謝,但我不想刪除整個電子郵件。我只想刪除我用來識別電子郵件的部分。所以我試圖刪除包含字符串的電子郵件的一部分。恩。我有一封電子郵件'xhjvv123dbw @ test.com'。我想將電子郵件更改爲'dbw @ test.com'。 – dwstein

+0

檢查新編輯的答案 – Yogesh

0

您可以使用cursor.forEach方法與String.prototype.replace()方法

var reg = /xhjvv123/; 
db.user.find({ email: reg }).forEach(function(doc){ 
    doc.email = doc.email.replace(reg, ""); 
    db.user.save(doc); 
}) 

演示

> db.user.insert({'email': "[email protected]"}) 
WriteResult({ "nInserted" : 1 }) 
> var reg = /xhjvv123/; 
> db.user.find({ email: reg }).forEach(function(doc){ 
...  doc.email = doc.email.replace(reg, ""); 
...  db.user.save(doc); 
... }) 
> db.user.find() 
{ "_id" : ObjectId("556f76e82db797abad412f56"), "email" : "[email protected]" } 
> 
+0

我嘗試過使用mongo shell並且無法使其工作。但我確信,我做錯了什麼。我需要把它放在腳本中嗎? – dwstein

+0

@dwstein你的意思是*無法工作*?增加演示 – styvane

0

請嘗試以下:

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};