Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Node.js mongodb update over ObjectID

I want to update my Document but it's not working 100% .

// Initialize connection once
MongoClient.connect("mongodb://localhost:27017/testDB", function(err, database) { //"mongodb://localhost:27017/test"
  if(err) throw err;

 db = database;

});

My collection row looks like:

{ "_id" : ObjectId("53f9379ce9575bbe9ec29581"), "name:paco", "status:student" }

Now if I want to update the row over the Document as follows:

db.collection('user', function(err,  collection){
                collection.update({'_id':ObjectID(req.session.loggedIn)}, {image : filename}, {w:1}, function(err, result){
                    console.log(result);

I am getting just:

{ "_id" : ObjectId("53f9379ce9575bbe9ec29581"), "image:filename" }

How can I make an update to get my data like this??:

{ "_id" : ObjectId("53f9379ce9575bbe9ec29581"), "name:paco", "status:student" , "image:filename"}

like image 530
machu pichu Avatar asked Aug 24 '14 01:08

machu pichu


2 Answers

Doing an update the way you did it is going to retrieve the document in your collection with the specified _id, then it is going to replace the content of this document with what you specified as your second parameter. In your case, it will retrieve the document with _id 53f9379ce9575bbe9ec29581, and replace the existing fields with the field you passed, image:filename (that means the existing fields will be removed, as you noticed).

What you want to do is use the $set operator. This operator will not touch the document retrieved, but only modify the field that you specified, or add it if it does not exist.

So your update command should look something like this:

db.collection('user').update({'_id':ObjectID(req.session.loggedIn)}, {$set: {image : filename}}, {w:1}, function(err, result){
    console.log(result);
like image 174
jbihan Avatar answered Sep 19 '22 22:09

jbihan


to update record by _id

var ObjectID = require('mongodb').ObjectID; 
exports.updateUser = function(req, res) {

     var collection = db.collection('users');

     collection.update(where,  $set:req.body, function(err, result) {
         if (err) {
             console.log('Error updating user: ' + err);
             res.send({'error':'An error has occurred'});
         } else {
             console.log('' + result + ' document(s) updated');
             res.send(user);
         }
     });
 }
like image 26
yin seng Avatar answered Sep 20 '22 22:09

yin seng