MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

O Mongoose suporta o método `findAndModify` do Mongodb?


O recurso não está bem (leia-se:nada) documentado, mas depois de ler o código-fonte, cheguei à seguinte solução.

Crie seu esquema de coleção.
var Counters = new Schema({
  _id: String,
  next: Number     
});

Crie um método estático no esquema que exporá o método findAndModify da coleção do modelo.
Counters.statics.findAndModify = function (query, sort, doc, options, callback) {
  return this.collection.findAndModify(query, sort, doc, options, callback);
};

Crie seu modelo.
var Counter = mongoose.model('counters', Counters);

Encontre e modifique!
Counter.findAndModify({ _id: 'messagetransaction' }, [], { $inc: { next: 1 } }, {}, function (err, counter) {
  if (err) throw err;
  console.log('updated, counter is ' + counter.next);
});

Bônus
Counters.statics.increment = function (counter, callback) {
  return this.collection.findAndModify({ _id: counter }, [], { $inc: { next: 1 } }, callback);
};

Counter.increment('messagetransaction', callback);