Создание методов для обновления и сохранения документов с помощью mongoose? - PullRequest
29 голосов
/ 24 января 2012

После ознакомления с официальной документацией я все еще не уверен, как создавать методы для использования в mongoose для создания и обновления документов.

Так как я могу это сделать??

Я имею в виду нечто подобное:

mySchema.statics.insertSomething = function insertSomething () {
    return this.insert(() ?
}

Ответы [ 3 ]

58 голосов
/ 24 августа 2012

Внутри статического метода вы также можете создать новый документ, выполнив:

schema.statics.createUser = function(callback) {
  var user = new this();
  user.phone_number = "jgkdlajgkldas";
  user.save(callback);
};
49 голосов
/ 24 января 2012

Методы используются для взаимодействия с текущим экземпляром модели.Пример:

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(..);
})

Статика используется, когда вы не хотите взаимодействовать с экземпляром, но выполняете вещи, связанные с моделью (например, ищите всех животных с именем «Ровер»).

Если вы хотите вставить / обновить экземпляр модели (в БД), то methods - это путь.Если вам просто нужно сохранить / обновить материал, вы можете использовать функцию save (уже существует в Mongoose).Пример:

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;
  });
});
1 голос
/ 27 июня 2013

Не думайте, что вам нужно создать функцию, которая вызывает .save ().Все, что вам нужно сделать перед сохранением модели, можно сделать с помощью .pre ()

Если вы хотите проверить, создается ли модель или обновляется, сделайте для этого проверку.isNew ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...