Mehrnoosh
Mehrnoosh

Reputation: 899

insert and update a field in MongoDB

I want to update all the collection field profile.email with emails.[0].address just something like this in SQL:

 update dbo.users
  set profile.email=emials.[0].address

I know this stupid code won't work on SQL either. Just put it to make it sensible for what I need.

it is something like this,but is not working:

  db.getCollection('users').update(
   {_id: "QYoHQkTuTXnEC6Pws"},
    {$set:
        {'profile.email': db.getCollection('users').aggregate({$match: {_id:'QYoHQkTuTXnEC6Pws'}}, 
             {$project: {_id:0,email: {$arrayElemAt: 
 ['$emails.address',0]}}})
      }
  }
 )

the result is not true :

  "email" : {
        "_batch" : [ 
            {
                "email" : "[email protected]"
            }
        ],
        "_useReadCommands" : true,
        "_cursorid" : NumberLong(0),
        "_batchSize" : undefined,
        "_ns" : "meteor.users",
        "_db" : {
            "_mongo" : {
                "slaveOk" : true,
                "host" : "localhost:3001",
                "defaultDB" : "",
                "_readMode" : "commands",
                "_writeMode" : "commands"
            },
            "_name" : "meteor"
        },
        "_collName" : "users",
        "_cursorHandle" : {}
    }

Upvotes: 1

Views: 540

Answers (2)

sidgate
sidgate

Reputation: 15244

You have to iterate over each document and update to achieve expected result.

db.users.find({}).forEach(function (user) {
   db.users.update({_id: user._id}, {$set: {'profile.email': user.emails[0].address}});
});

Upvotes: 2

Yungang.Feng
Yungang.Feng

Reputation: 61

db.users.update({_id: "doc id"},
    {$set: {'profile.email': db.users.find({_id: "doc id"}).emails[0].address}
})

Your task has 2 steps: 1. get the email address, which is performed by "db.users.find" 2. update the document, which is performed by "db.users.update"

Upvotes: -1

Related Questions