Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

MongoDB : how to set a new field equal to the value of another field, for every document in a collection [duplicate]

I need to run a migration script to insert a value (already available in each document) into an array of this same document. This has to be done for each documents of my collection (no selection query required)

How to change this:

{
    "_id": ObjectID("5649a7f1184ebc59094bd8b3"),
    "alternativeOrganizer": ObjectID("5649a7f1184ebc59094bd8b1"),
    "myArray": []
}

Into this:

{
    "_id": ObjectID("5649a7f1184ebc59094bd8b3"),
    "alternativeOrganizer": ObjectID("5649a7f1184ebc59094bd8b3"),
    "myArray": [
         ObjectID("5649a7f1184ebc59094bd8b3")
    ]
}

Thanks in advance.

like image 966
franchez Avatar asked Dec 15 '22 04:12

franchez


1 Answers

I would use forEach and $addToSet, so that the script can be re-executable.

The $addToSet operator adds a value to an array unless the value is already present, in which case $addToSet does nothing to that array.

db.collectionname.find().forEach(function(results)
{    
    print( "Id: " + results._id );
    db.collectionname.update( {_id : results._id},
                       {$addToSet : {myArray : results._id}})
});
like image 198
notionquest Avatar answered May 24 '23 09:05

notionquest