Perform $inc In Instance Method, Get Updated Document
I have an instance method in Mongoose where I need to perform Mongo's $inc operator on a field. My understanding is that since v3, Mongoose does not support $inc in any form other
Solution 1:
This would seem like the droids you are looking for:
usersSchema.methods.completePurchase = (item, incBalance, cb) ->
  model = @model(@constructor.modelName, @schema)
  model.findByIdAndUpdate @_id,
    $addToSet:
      purchases: item
    $inc:
      balance: incBalance
  , cb
Or in JavaScript:
usersSchema.methods.completePurchase = function(item, incBalance, cb) {
  var model = this.model(this.constructor.modelName, this.schema);
  return model.findByIdAndUpdate(this._id, {
    $addToSet: {
      purchases: item
    },
    $inc: {
      balance: incBalance
    }
  },
  cb);
};
And you would call as (JavaScript, sorry!):
user.completePurchase(item, incBalance function(err,doc) {
    // Something here
})
Or at least that works for me.
MyTest
var mongoose = require('mongoose');
varSchema = mongoose.Schema;
mongoose.connect('mongodb://localhost/nodetest')
var childSchema = newSchema({ name: 'string' });
var parentSchema = newSchema({
  children: [childSchema]
});
parentSchema.methods.findMe = function(cb) {
  returnthis.model(this.constructor.modelName, this.schema)
    .findById(this._id, cb);
};
varParent = mongoose.model('Parent', parentSchema);
var parent = newParent( { children: [{ name: 'Bart' }] });
parent.save(function(err,doc) {
  console.log( "saved: " + doc );
  doc.findMe(function(err,doc2) {
    console.log( "found: " + doc2 );
  });
});
Post a Comment for "Perform $inc In Instance Method, Get Updated Document"