Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to replace string in all documents in Mongo

I need to replace a string in certain documents. I have googled this code, but it unfortunately does not change anything. I am not sure about the syntax on the line bellow:

pulpdb = db.getSisterDB("pulp_database"); var cursor = pulpdb.repos.find(); while (cursor.hasNext()) {   var x = cursor.next();   x['source']['url'].replace('aaa', 'bbb'); // is this correct?   db.foo.update({_id : x._id}, x); } 

I would like to add some debug prints to see what the value is, but I have no experience with MongoDB Shell. I just need to replace this:

{ "source": { "url": "http://aaa/xxx/yyy" } } 

with

{ "source": { "url": "http://bbb/xxx/yyy" } } 
like image 727
lzap Avatar asked Apr 06 '12 10:04

lzap


People also ask

How do I replace text in MongoDB?

MongoDB 4.4 introduced nine new aggregation pipeline operators, including two new operators for finding and replacing a substring. The two new operators that allow you to find and replace a substring are the $replaceOne and $replaceAll operators.

How do you copy all documents of a collection using query in MongoDB?

MongoDB – copyTo() Method In MongoDB, copyTo() method is used to copies all the documents from one collection(Source collection) to another collection(Target collection) using server-side JavaScript and if that other collection(Target collection) is not present then MongoDB creates a new collection with that name.


1 Answers

It doesn't correct generally: if you have string http://aaa/xxx/aaa (yyy equals to aaa) you'll end up with http://bbb/xxx/bbb. But if you ok with this, code will work.

To add debug info use print function:

var cursor = db.test.find(); while (cursor.hasNext()) {   var x = cursor.next();   print("Before: "+x['source']['url']);   x['source']['url'] = x['source']['url'].replace('aaa', 'bbb');   print("After: "+x['source']['url']);   db.test.update({_id : x._id}, x); } 

(And by the way, if you want to print out objects, there is also printjson function)

like image 86
om-nom-nom Avatar answered Sep 27 '22 16:09

om-nom-nom