Подтвердить что ты не робот

Nodejs/мангуст. какой подход предпочтительнее для создания документа?

Я нашел два подхода для создания нового документа в nodejs, когда я работаю с mongoose.

Первый:

var instance = new MyModel();
instance.key = 'hello';
instance.save(function (err) {
  //
});

Второй

MyModel.create({key: 'hello'}, function (err) {
  //
});

Есть ли разница?

4b9b3361

Ответ 1

Да, основное отличие заключается в способности выполнять вычисления до того, как вы сохраните или как реакцию на информацию, которая появляется при создании новой модели. Самый распространенный пример - убедиться, что модель действительна, прежде чем пытаться ее сохранить. Некоторые другие примеры могут создавать любые отсутствующие отношения перед сохранением, значения, которые нужно рассчитывать "на лету" на основе других атрибутов, и модели, которые должны существовать, но потенциально никогда не могут быть сохранены в базе данных (прерванные транзакции).

Итак, в качестве базового примера некоторых вещей, которые вы могли бы сделать:

var instance = new MyModel();

// Validating
assert(!instance.errors.length);

// Attributes dependent on other fields
instance.foo = (instance.bar) ? 'bar' : 'foo';

// Create missing associations
AuthorModel.find({ name: 'Johnny McAwesome' }, function (err, docs) {
  if (!docs.length) {
     // ... Create the missing object
  }
});

// Ditch the model on abort without hitting the database.
if(abort) {
  delete instance;
}

instance.save(function (err) {
  //
});

Ответ 2

Этот код предназначен для сохранения массива документов в базу данных:

app.get("/api/setupTodos", function (req, res) {

var nameModel = mongoose.model("nameModel", yourSchema);
//create an array of documents
var listDocuments= [
    {
        username: "test",
        todo: "Buy milk",
        isDone: true,
        hasAttachment: false
    },
    {
        username: "test",
        todo: "Feed dog",
        isDone: false,
        hasAttachment: false
    },
    {
        username: "test",
        todo: "Learn Node",
        isDone: false,
        hasAttachment: false
    }
];

nameModel.create(listDocuments, function (err, results) {

    res.send(results);
});

'nameModel.create(listDocuments)' разрешить создание коллекции с именем модели и выполнить метод .save() только для документа в массиве.

Кроме того, вы можете сохранить только один документ следующим образом:

var myModule= mongoose.model("nameModel", yourSchema);

    var firstDocument = myModule({
      name: String,
surname: String
    });

firstDocument.save(function(err, result) {
  if(if err) throw err;
  res.send(result)

});

Ответ 3

Я предпочитаю простой пример с предопределенными значениями пользователя и проверкой модели.

   // Create new user.
   let newUser = {
       username: req.body.username,
       password: passwordHashed,
       salt: salt,
       authorisationKey: authCode
   };

   // From require('UserModel');
   return ModelUser.create(newUser);

Затем вы должны использовать валидаторы в классе модели (поскольку это можно использовать в других местах, это поможет уменьшить ошибки/ускорить разработку)

// Save user but perform checks first.
gameScheme.post('pre', function(userObj, next) {
    // Do some validation.
});