Search code examples
mongodbmonk

Can't find user by name with Monk / Mongo


I'm working on a CRUD application with Node, Mongo & Monk. I'd like to find a record by username, and then update it. But I'm unable to find a record, this code isn't working:

// GET User Profile
router.get('/userprofile', function(request,response){
  var db = request.db;
  var userName = request.body.username;
  var collection = db.get('usercollection');
  collection.findOne({
  "username": userName
   },{},function(e,user){
   response.render('userprofile', {
     "user": user
     });
   });
  });

The "findOne" method doesn't return anything, and the "user" object ends up empty.


Solution

  • Remove the middle empty object from the signature for the findOne() method signature for the query to work:

    Note: The way you are getting the userName is for when the request method is a POST, here you are doing a GET so you need to use the request.query property. More details here

    var userName = request.query.username;
    collection.findOne({"username": userName}, function(e,user){
        response.render('userprofile', { "user": user });
    });
    

    If you want to update then you can use the update() method, suppose you want to update the username field to change it to 'foo', the following stub shows how you can do the update:

    var u = collection.update({ "username": userName }, { "$set": { username: 'foo' } });
    u.complete(function (err, result) {
        console.log(err); // should be null
        console.log(result); // logs the write result
    });