Question

In mongo I have a collections with records. These record are very complex. Now I would like to duplicate one of them.

I can easily select the one

mongo> var row = db.barfoo.find({"name":"bar"});

Now I actually don't know what to do. I don't know what is in row because I cannot find a way to print its content. How can I change specific properties and finally insert this modified row again

mongo> db.barfoo.insert(row);

thnx

Was it helpful?

Solution 2

I am going to assume that you're working directly inside the mongo shell.

Once you have your document (not a row :P ), you'd modify the properties in the same way you would a normal JavaScript object:

var doc = db.barfoo.findOne( { "name": "bar" } );
doc.name = "Mr Bar";

Note that the find() command returns a cursor, so if you're looking to extract a single document, you should use the findOne() function. This function returns a single document.

If you are interested in duplicating numerous documents, you can use the find() function and iterate over the cursor to retrieve each document:

db.barfoo.find( { "name": "bar" } ).forEach( function( doc ){
  doc.name = "Mr Bar";
}

After you change the relevant properties, you can use the insert/save methods to persist the data back to mongo. Don't forget to change/delete the _id attribute so that you'll actually create a new document.


As a side note, in order to view the contents of an object in the mongo shell, you can use the print() function. If you want a more visually appealing output, you could use printjson().

OTHER TIPS

You must change value _id - generate new:

var row = db.barfoo.findOne({"name":"bar"});
row._id = ObjectId();
db.barfoo.insert(row);

Good Luck!

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top