qlogic
qlogic

Reputation: 58

How to delete particular subdocument in mongoose

Hi I'm new to MongoDB and programming. I'm trying to delete particular subdocument in particular parent document and I'm using Mongoose and Node.js. Here is my Schema model (user.js file):

var userStuff = mongoose.Schema({
  itemName: String,
  itemDesc: String
});

var userSchema = mongoose.Schema({
  googleEmail: String,
  googleName: String,
  stuff: [userStuff]
});

exports.user = mongoose.model('User', userSchema);
exports.userStuff = mongoose.model('UserStuff', userStuff);

Here is how I try to delete:

  var User = require("../../models/user.js");
  ...
  var userId = req.session.passport.user;
  var deleteItemId = req.params.id;
  User.user.findOne({_id: userId}, function(err, user){
    if(err){
        console.log(err);
      }else {
        User.userStuff.remove({ _id: deleteItemId}, function(err, data){
          if(err){
            console.log(err);
          }else{
            user.save(function(err){
              if(err){
              console.log(err);
              } else {
              res.status(200).send();
              }
            });
          }
        });

    }
  });

Can you show how I can delete particular item for particular user?

Upvotes: 4

Views: 1933

Answers (1)

chridam
chridam

Reputation: 103335

To delete particular item for particular user, you can use the $pull operator to remove the subdocument with an atomic update:

User.user.update(
    { "_id": req.session.passport.user },
    { "$pull": { "stuff": { "_id": req.params.id } } },
    function(err, numAffected) { 
        if(err){
            console.log(err);
        } else {
            res.status(200).send();
        }
    }
);

Upvotes: 4

Related Questions