¿Creando métodos para actualizar y guardar documentos con mangosta?


Después de revisar la documentación oficial , todavía no estoy seguro de cómo crear métodos para usar dentro de mongoose para crear y actualizar documentos.

Entonces, ¿cómo puedo hacer esto?

Tengo algo como esto en mente:

mySchema.statics.insertSomething = function insertSomething () {
    return this.insert(() ?
}
Author: Industrial, 2012-01-24

3 answers

Se utilizan métodos para interactuar con la instancia actual del modelo. Ejemplo:

var AnimalSchema = new Schema({
    name: String
  , type: String
});

// we want to use this on an instance of Animal
AnimalSchema.methods.findSimilarType = function findSimilarType (cb) {
  return this.find({ type: this.type }, cb);
};

var Animal = mongoose.model('Animal', AnimalSchema);
var dog = new Animal({ name: 'Rover', type: 'dog' });

// dog is an instance of Animal
dog.findSimilarType(function (err, dogs) {
  if (err) return ...
  dogs.forEach(..);
})

La estática se usa cuando no se desea interactuar con una instancia, pero se hacen cosas relacionadas con el modelo (por ejemplo, buscar todos los animales llamados 'Rover').

Si desea insertar / actualizar una instancia de un modelo (en la base de datos), entonces methods es el camino a seguir. Si solo necesitas guardar / actualizar cosas puedes usar la función save (ya existente en Mangosta). Ejemplo:

var Animal = mongoose.model('Animal', AnimalSchema);
var dog = new Animal({ name: 'Rover', type: 'dog' });
dog.save(function(err) {
  // we've saved the dog into the db here
  if (err) throw err;

  dog.name = "Spike";
  dog.save(function(err) {
    // we've updated the dog into the db here
    if (err) throw err;
  });
});
 48
Author: alessioalex,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-01-24 14:23:19

Desde dentro de un método estático, también puede crear un nuevo documento haciendo:

schema.statics.createUser = function(callback) {
  var user = new this();
  user.phone_number = "jgkdlajgkldas";
  user.save(callback);
};
 58
Author: hydrozen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-08-24 15:42:09

No creo que necesite crear una función que llame .guardar(). Cualquier cosa que necesite hacer antes de guardar el modelo se puede hacer usando .pre()

Si desea verificar si el modelo se está creando o actualizando, verifique esto.isNew ()

 1
Author: Xerri,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-27 14:17:17