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

StackOverflow https://stackoverflow.com/questions/9305987

  •  25-10-2019
  •  | 
  •  

Вопрос

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

Первый:

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

Второй

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

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

Это было полезно?

Решение

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

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

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) {
  //
});

Другие советы

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

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)

});

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

   // 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.
});
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top