Organizational Research By

Surprising Reserch Topic

how to update embedded document in mongoose


how to update embedded document in mongoose  using -'mongodb,node.js,mongoose'

I've looked through the mongoose API, and many questions on SO and on the google group, and still can't figure out updating embedded documents.

I'm trying to update this particular userListings object with the contents of args.

for (var i = 0; i < req.user.userListings.length; i++) {
  if (req.user.userListings[i].listingId == req.params.listingId) {
    User.update({_id: req.user._id, 'userListings._id': req.user.userListings[i]._id},{'userListings.isRead': args.isRead, 'userListings.isFavorite': args.isFavorite, 'userListings.isArchived': args.isArchived}, function(err, user) {
      res.send(user);
    });
  }
}


Here are the schemas:

var userListingSchema = new mongoose.Schema({
  listingId: ObjectId
  , isRead: {type: Boolean, default: true}
  , isFavorite: {type: Boolean, default: false}
  , isArchived: {type: Boolean, default: false}
});

var userSchema = new mongoose.Schema({
  userListings: [userListingSchema]
});


This find also doesn't work, which is probably the first issue:

User.find({'_id': req.user._id, 'userListings._id': req.user.userListings[i]._id}, function(err, user){console.log(err ? err : user);});


which returns:

{ stack: [Getter/Setter],
  arguments: [ 'path', undefined ],
  type: 'non_object_property_call',
  message: [Getter/Setter] }


That should be the equivalent of this mongo client call:

db.users.find({'userListings._id': ObjectId("4e44850101fde3a3f3000002"), _id: ObjectId("4e4483912bb87f8ef2000212")})


Running:

mongoose v1.8.1
mongoose-auth v0.0.11
node v0.4.10

    

asked Sep 18, 2015 by vimaldas2005
0 votes
96 views



Related Hot Questions

3 Answers

0 votes
NULL
answered Sep 18, 2015 by 20shahi
0 votes
NULL
answered Sep 18, 2015 by amit.gupta
0 votes
NULL
answered Sep 18, 2015 by rajeevr642

...