web-dev-qa-db-fra.com

Nodejs / mangouste. quelle approche est préférable pour créer un document?

J'ai trouvé deux approches pour créer un nouveau document dans nodejs lorsque je travaille avec mangouste.

Premier:

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

Deuxième

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

Y a-t-il une différence?

39
Erik

Oui, la principale différence est la possibilité de faire des calculs avant d'enregistrer ou en réaction aux informations qui apparaissent pendant que vous construisez votre nouveau modèle. L'exemple le plus courant serait de s'assurer que le modèle est valide avant d'essayer de l'enregistrer. Certains autres exemples peuvent créer des relations manquantes avant l'enregistrement, des valeurs qui doivent être calculées à la volée en fonction d'autres attributs et des modèles qui doivent exister, mais qui pourraient ne jamais être enregistrés dans la base de données (transactions abandonnées).

Donc, comme exemple de base de certaines des choses que vous pourriez faire:

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

Ce code sert à enregistrer un tableau de documents dans la base de données:

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)' permet de créer une collection avec le nom du modèle et d'exécuter la méthode .save() uniquement pour le document dans le tableau.

Vous pouvez également enregistrer un seul document de cette manière:

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
Morris

Je préfère un exemple simple avec des valeurs utilisateur prédéfinies et un côté modèle de vérification de validation.

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

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

Ensuite, vous devez utiliser des validateurs dans la classe de modèle (car cela peut être utilisé dans d'autres emplacements, cela aidera à réduire les erreurs/accélérer le développement)

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